24. januar 2009 - 22:03Der 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.
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
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.
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.
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.
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.
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.
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.
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.
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.
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.