20. april 2009 - 10:47Der er
9 kommentarer og 1 løsning
Select query - virker kun med absolut værdi - Hvad gør jeg galt?
Hej eksperter,
Jeg har en MySQL database med nogle brugerdata. Jeg forsøger at lave et login, hvor jeg tester om password og brugernavn er korret. Men når jeg forsøger at teste via en variable, får jeg fejl, mens det virker, når jeg taster den absolutte værdi af koden. Neden for er min php-kode:
DENNE KODE VIRKER IKKE! <?php $kode = "kodeord"; $user = "bruger"; include("dbconnect.php"); mysql_select_db("Database", $conn); $result = mysql_query("SELECT * FROM Bruger WHERE kode = $kode AND User = $user") or die (mysql_error() . mysql_errno()); $no_rows = mysql_num_rows($result); echo $no_rows ?>
DENNE KODE VIRKER! <?php $kode = "kodeord"; $user = "bruger"; include("dbconnect.php"); mysql_select_db("Database", $conn); $result = mysql_query("SELECT * FROM Bruger WHERE kode = 'kodeord' AND user = $user") or die (mysql_error() . mysql_errno()); $no_rows = mysql_num_rows($result); echo $no_rows ?>
Jeg får følgende meddelelse: [i]Unknown column 'kodeord' in 'where clause'1054[/]
Kan I se, hvad det er jeg gør galt. Feltet kode er defineret som varchar(20) i MySQL databasen
du bør dog enten ændre din query eller benytte mysqli for at undgå mysql-injections.
hvis du ændrer querien, så du henter navn og kode fra db hvor navnet mtacher og derefter tjekker om koderne stemmer overens, kan man ikke omgå det så nemt, som man kan i din nuværende metode.
Jackobdo's svar løser problemet. Men jeg tror ikke du har postet det som et "svar".
splazz - Jeg er ikke helt sikker på, hvad du mener. Jeg er noget uerfaren med php. Mysqli, er det en anden metode til at forbinde til databasen med? Hvad er formålet/fordelen?
-> jakob - med den rigtige sql-injection kan du sagtens få fin query til at returne en række og hvis man ud fra det opretter en session, er det jo ikke noget problem.
hvis man derimod gør det på min måde og senere tjekker passwordet mod det der er hentet i query'en og først i tilfælde af at de to matcher giver adgang til de beskyttede sider, er det lidt sværere at komme ind.
ret mig endelig hvis jeg tager fejl. der er sikkert en måde at bryde den på også :)
Du har selvfølgelig ret i din løsning er et ekstra niveau af sikkerhed. Men hvis man sikrer sit input i første omgang, så er min løsning vel ok.
brugernavn = a-z0-9 og måske det samme med kodeord. Så burde en sql injection jo ikke være mulig, da jeg formoder det mindst kræver en ' eller hex/octal værdien for den.
men med en combo af de to ting, bliver det svært :)
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.