28. marts 2007 - 23:26Der er
8 kommentarer og 1 løsning
link.php?navn=k (sikkerhed)
Ang. sikkerhed ved links og database
Eksempel: På "side 1" har jeg nogle links som brugeren kan klikke på for at få en liste over navne:
link.php?navn=a link.php?navn=k link.php?navn=s
Brugeren klikker fx på link.php?navn=k og får en liste over navne med k. Jeg trækker data ud fra en database ved følgende sql sætning: Select fuldenavn from TABEL WHERE navn=$_GET[navn]
Rent sikkerhedsmæssigt er der så en bedre måde at gøre det på? En bruger kan jo ændre i browserlinket og sætte "k" til hvad som helst. Kan han misbruge det og fx se,læse,ændre eller påvirke noget i databasen?
Generelt set ja. Man skal aldrig stole på brugerinput. Mon ikke du mener noget i retning af WHERE navn='$_GET[navn]%'
Er din PHP indstillet til "magicquotes" burde det ikke være muligt at lave en sql-injektion i dette tilfælde. Men alligevel bør man altid, i betydningen ALTID, lave brugervalidering. I dit tilfælde test 1) der er kun eet tegn 2) det ligger mellem "a" og "z" (eller hvad dine grænser nu er).
l0vgaard: Hvad er det lige helt nøjagtig den string gør? Jeg kan godt ændre i linket og få et andet udtræk fra databasen selvom jeg har added den string - fx ændre k til a.
Ja, det er også fair nok, at man kan det jo. Det, som derimod ikke vil gå galt, i er de tilfælde, hvor du f.eks. skriver en ' i navnet. En ' kan i nogle tilfælde bruges som mysql injection og vil i sådan et tilfælde kunne virke som et sikkerhedshul :)
krummel --> WHERE navn='$_GET[navn]%' er ganske rigtigt, som du selv nævner, en wildcard 'ting'. Den matcher alle 'navn' som begynder med $_GET[navn].
Og som erikjacobsen nævner er det altid en god ide, når man kan, at checke det input brugeren laver. Hvis f.eks. ericjacobsen's forudsætninger er korrekte kunne et hurtigt check se således ud -->
$navn=""; if(preg_match("/^[a-z]{1}$/", $_GET[navn])) { $navn=$_GET[navn]; } $q=mysql_query("SELECT fuldenavn FROM tabel WHERE navn='".mysql_real_escape_string($navn)."'");
Håber det hjælper :)
Mvh. Johan
Synes godt om
Ny brugerNybegynder
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.