Avatar billede Slettet bruger
10. marts 2003 - 22:09 Der er 10 kommentarer og
1 løsning

Sikkerhed (eller mangel på samme) i MySQL querys?

Hej!

Efter at være taget på sengen med en SQL injection (der ikke ødelagde noget) er jeg begyndt at følge op på sikkerheden i forbindelse med databaseforespørgsler.

Jeg har slået en lille liste sammen som jeg gerne vil vide om er dækkende.

Det er naturligvis altid muligt at hacke et website eller en database, men er disse ikke de grundlæggende ideer omkring at beskytte sin database?

1. Tjekke for antal returnerede rækker, hvs der kun forventes en række.

2. Tjek for ulovlige karakterer (', ", ´, ` og ;).

3. Tjek for --, UNION, OR og SELECT i brugerinput.

4. SELECT kun de nødvendige felter.
Avatar billede erikjacobsen Ekspert
10. marts 2003 - 22:12 #1
Du skal ikke specielt gøre noget af dette. Du skal derimod sikre dig
at data fra brugeren overholder de ting du forventer, fx at talfelter
er tal. Og så skal du sikre dig at addslahes, direkte eller indirekte,
anvendes på tekstfelter fra brugeren. Det er såmænd det hele.
Avatar billede morw Nybegynder
10. marts 2003 - 22:15 #2
escaper du ikke dit brugerinput? Dette kan gøres med addslashes i php. Hvis du gør dette skal du jo ikke tænke så meget mere over det.
Avatar billede erikjacobsen Ekspert
10. marts 2003 - 22:16 #3
øh, addslashes var underforstået, at du anvendte PHP ;)
Avatar billede morw Nybegynder
10. marts 2003 - 22:20 #4
Endvidere står magic_quotes_gpc til on som standard hvilket betyder at det sker automatisk for værdier fra get, post & cookie
Avatar billede mortrr Praktikant
10. marts 2003 - 23:32 #5
Hvis man overholder det som erikjacobsen angiver, behøver du reelt ikke gøre andet.
Altså:
1. Kontroller at et tal er et tal - det er den de fleste glemmer.
2. Sørg for at "escape" ' (erstat med to '')

Der er ikke noget der hedder "ulovlige karakterer" eller ting input ikke må indeholde. De vil altid være lovlige i en eller anden sammenhæng.
Avatar billede erikjacobsen Ekspert
11. marts 2003 - 08:19 #6
I MySql behøver man strengt taget ikke teste om et tal er et tal, da det
er lovligt at skrive  ....where id='99', og om der så  skulle stå buksevand
i stedet for 99 gør ikke forespørgslen farlig - blot nytteløs.

Men det er nu en god regel, for at få en fornuftig opførsel af programmet.

I MySql bør man nu skrive \' i stedet for ' (og ikke 2 stk ' )
Avatar billede Slettet bruger
11. marts 2003 - 08:51 #7
Ok, det lyder rart, men sagen var at det var en IIS spand med ASP som blev angrebet, og hvordan adder man slashes på sådan noget?

Jeg holder mig til PHP fremover ;)
Avatar billede mortrr Praktikant
11. marts 2003 - 09:02 #8
fx:
Navnet=replace(Navnet,"'","''");

Og MySql er ligeglad om man escaper med \' eller ''
Til gengæld er det med mysql ikke nok kun at escape '.
Du skal escape " ' og \

php er ikke mere sikker end asp. Det er bare flere fjolser der koder asp ;o)
Avatar billede Slettet bruger
11. marts 2003 - 09:08 #9
Hehe...det skulle heller ikke ses som et angreb på sikkerheden i ASP, men det er simpelthen fordi jeg er doven af natur. Så er det nemmere at lade PHP klarer ærterne end at replace hele tiden ;)
Avatar billede bufferzone Praktikant
18. marts 2003 - 18:01 #10
Avatar billede Slettet bruger
18. marts 2003 - 23:19 #11
Tak for linket, det ser ganske nyttigt ud!
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
Computerworld tilbyder specialiserede kurser i database-management

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