Avatar billede krummel Juniormester
28. marts 2007 - 23:26 Der 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?
Avatar billede loevgaard Praktikant
28. marts 2007 - 23:37 #1
SELECT * FROM `table` WHERE navn = '".mysql_escape_string($_GET['navn'])."'
Avatar billede loevgaard Praktikant
28. marts 2007 - 23:38 #2
På den måde, kan brugeren skrive, hvad han vil, men din databases sikkerhed bliver ikke kompromitteret :)
Avatar billede erikjacobsen Ekspert
28. marts 2007 - 23:39 #3
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).
Avatar billede krummel Juniormester
29. marts 2007 - 00:06 #4
l0vgaard: Når man søger på mysql_escape_string på mysql.com, så siger den man skal bruge
mysql_real_escape_string i stedet for
er det korrekt?

Erik - du har ret
Er det med vilje du har sat % bagved - hvad gør den? et wildcard af en art?
Avatar billede loevgaard Praktikant
29. marts 2007 - 00:09 #5
Ja, det er rigtigt :)
Avatar billede krummel Juniormester
29. marts 2007 - 00:21 #6
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.
Avatar billede loevgaard Praktikant
29. marts 2007 - 00:27 #7
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 :)
Avatar billede krummel Juniormester
29. marts 2007 - 00:30 #8
åhh ja - tak for svar
Avatar billede johan.o Nybegynder
29. marts 2007 - 14:39 #9
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
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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