Avatar billede flodhesten Nybegynder
24. januar 2009 - 22:03 Der er 19 kommentarer og
1 løsning

Sikker forbindelse til MySQL

Jeg ved at det er muligt at oprette en forbindelse til en MySQL database i java. Jeg har dog læst noget om at, det ikke er sikkert, da java nemt kan decompiles. Men findes der en 100% sikker måde, så en eventuel decompiling ikke afslører adgangeskode til serveren?

Jeg har dog set mange mange internetsider der afvikler java applets. Er man logget ind på en bruger ser man så eksempelvis hvor mange point der er på brugeren inde i applet. Jeg går ud fra at det er en elelr andet sikker forbindelse der ikke kan hackes. I hvert fald har jeg set både brætspilshjemmeside og casinohjemmesider hvor ens balance bliver vist i programmet.

Jeg håber at mit spørgsmål er forståeligt, og at jeg kan få afklaret noget om sikkerheden. Jeg vil jo nødig have at andre kan få adgang til serveren, hvis jeg laver et program der henter info fra min MySQL database.
Avatar billede erikjacobsen Ekspert
24. januar 2009 - 22:09 #1
Man plejer (eller bør!) sætte et mellemled imellem, fx en webservice. Denne har adgang til databasen, og checker på passende om henvendelser udefra er lovlige.
Avatar billede erikjacobsen Ekspert
24. januar 2009 - 22:10 #2
på passende VIS
Avatar billede flodhesten Nybegynder
24. januar 2009 - 22:11 #3
Okay, er det noget du eller andre har mulighed for at uddybe nærmere? Jeg er nemlig lidt interesseret i hvordan det kan lade sig gøre.
Avatar billede arne_v Ekspert
24. januar 2009 - 22:13 #4
Password til database i applet kode er en skidt ide - det kan nemt findes med en
decompile. Og iøvrigt er en database ikke beregnet til at være i frontlinien.

Et web service kald eller et helt normal web side kald der returnerer data er bedre.
Specielt hvis du kan genbruge dit login i selve web app.

Hvis du absolut skal have direkte JDBC adgang i en applet, så skal du lade brugeren
angive password.
Avatar billede erikjacobsen Ekspert
24. januar 2009 - 22:15 #5
I princippet, ja ;) Men hvad er det, der skal uddybes?

Der er skrevet en del om det. Ex: http://www.netbeans.org/kb/60/websvc/rest-mysql

Og ellers: http://finddetselv.net/search?q=webservice+mysql  :)
Avatar billede flodhesten Nybegynder
24. januar 2009 - 22:19 #6
Tænker på hvordan det fungerer og hvad det kræver og hvordan man gør. Eventuelt et eksempel eller lign.

Men jeg vil lige kigge nærmere på de links.
Avatar billede flodhesten Nybegynder
24. januar 2009 - 22:21 #7
Haha, meget morsomt. Men nogle gange skal man også lige vide hvad man skal søge efter og hvilke nøgleord man skal bruge :-)

At der så kommer forståelsesproblemer efter jeg har læst et par linjer, må jo så være det næste problem ;)
Avatar billede arne_v Ekspert
24. januar 2009 - 22:22 #8
For 6 år siden lavede jeg et super simpelt eksempel med:
  Java applet - PHP - MySQL
til et andet spørgsmål.

Koden ligger på:
  http://www.vajhoej.dk/arne/eksperten/applet_db_php/
Avatar billede flodhesten Nybegynder
24. januar 2009 - 22:24 #9
Okay. Hvordan er sikkerheden i det eksempel?
Avatar billede erikjacobsen Ekspert
24. januar 2009 - 22:25 #10
Naturligvis og naturligvis.

Sådan groft sagt vil systemet bestå af:

1) Din mysql-database
2) En webserver med en webservice, med adgang til databasen. Kan være skrevet i andet end Java (PHP,ASP.NET etc)
3) Dit Java-program.

I 2) defineres passende metoder, der afleverer og modtager data, fx: Hentkunde(kundeid)
Mellem 2) og 3) sendes data i SOAP-format, så du ikke selv skal kode noget, men kan få det lavet automatisk.
Avatar billede flodhesten Nybegynder
24. januar 2009 - 22:27 #11
Arh, tror jeg forstår ideen med et mellemled nu. For i det eksempel har man jo koden der indsætter til at lægge på egen server.
Avatar billede arne_v Ekspert
24. januar 2009 - 22:31 #12
I mit eksempel ligger passwordet til databasen i PHp siderne på serveren. Der er ikke lavet noget sikkerhed
i PHP scriptet med check for login, men det kan laves.
Avatar billede arne_v Ekspert
24. januar 2009 - 22:34 #13
Valg af teknologi afhænger lidt af hvilke Jva versioner du vil understøtte:

enhver version kan klare HTTP som henter CSV eller lignende
Java 1.4 og nyere vil kunne klare REST fordi den inkludrere en XML parser
Java 1.6 (og nyere) vil kunne klare SOAP fordi der er indbygget SOAP support

Hvis man skal bruge SOAP med en Java version ældre end 1.6 skal der downloades
SOAP libs f.eks. Axis.

Hvis man skal bruge REST og dermed XML med en Java version ældre end 1.4 skal der downloades
XML libs f.eks. Xerces.

Download kan ske helt automatisk, men det tager lidt tid.
Avatar billede flodhesten Nybegynder
24. januar 2009 - 22:40 #14
Hvis man skulle checke om en person er logget ind mens han bruger programmet, hvordan kunne man så gøre det? Vi behøver ikke at tage den i detaljer nu, men rart nok at have en ide om det.
Avatar billede erikjacobsen Ekspert
24. januar 2009 - 22:42 #15
Du kan sende et brugernavn/password med i forespørgslen.
Avatar billede arne_v Ekspert
24. januar 2009 - 22:44 #16
Hvis man ikke allerede er logget ind må du have et username og password felt i appletten
og
sende det indtastede med i requesten.

Hvis man allerede er logget ind på web siden, så er tricket at få sendt session cookie
med i requesten.
Avatar billede flodhesten Nybegynder
24. januar 2009 - 23:06 #17
Okay, super.

Men arne, hvis man nu forestiller sig i din kode, at man har forbindelse til en 'rigtig' host og ikke bare en localhost på computeren og at 2 personer kører programmet på hver sin computer. Hvis den ene så skriver en besked, så vil den besked vel ikke dukke op i programmet hos den anden, før han også skriver en besked. Jeg mener, den opdaterer vel ikke automatisk hver gang der sker en ændring i databasen?

Ellers vil jeg sige tak for hjælpen. Med hensyn til point, så foreslår jeg, at de deles lige imellem jer.
Avatar billede erikjacobsen Ekspert
24. januar 2009 - 23:07 #18
Ingen point til mig, tak. Som vi skriver det, opdateres der ikke noget automatisk. Du kan jo fx spørge hvert XX sekund.
Avatar billede arne_v Ekspert
24. januar 2009 - 23:32 #19
Hvis du bruger HTTP er du nødt til at polle d.v.s. requeste opdateringer f.eks. hvert sekund.

Hvis du bruger en server app altså en ikke web server app, så kan du lade dine applets
lave en permanent socket connection. Så kan noget der kommer ind fra en klient pushed ud til
alle de andre klienter.
Avatar billede arne_v Ekspert
24. januar 2009 - 23:32 #20
og et svar fra mig
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester