28. maj 2010 - 19:08Der er
12 kommentarer og 1 løsning
Sikret mod SQL injection
Hejsa..
Jeg vil gerne vide hvad jeg kan gøre, så jeg er sikker på, at der ikke kan laves SQL injection på min side. Er det noget med at jeg f.eks. skal fjerne specialtegn fra variablerne? - Og hvis ja, hvordan så?
$query = mysql_query( "SELECT * FROM table WHERE id = '".mysql_real_escape_string($_GET['id'])."' ORDER BY id DESC LIMIT 1" ) or die(mysql_error()); while( $data = mysql_fetch_array( $query ) ) { echo $data['id']."<br />"; }
Okay, tak.. Men man er altså 100% sikret mod sql injection, hvis man husker mysql_real_escape_string(); om POST og GET variabler der skal i forbindelse med databasen?
Nu ved jeg ikke hvilken løsning du valgte, men hvad jeg har læst på nettet rundt omkring virker det som om at mysql_real_escape_string(); er en smule forældet og at prepared statements er den vej man nu bør gå. Nu er jeg ikke selv så meget inde i det endnu researche blot lidt fordi jeg står med samme problem som dig.
Men er det evt. muligt at kombinerer mysql_real_escape_string() for derefter at anvende prepared staments til at indsætte data i DB? for i så fald tror jeg at det ville blive sikkert.
Hvis altså ikke prepared statements er nok i sig selv.
Så hvis man anvender prepared statements behøver man altså heller ingen inputvalidering (fra. eksempelvis forms) for at undgå SQL injection?.
Noget helt andet er så, at det kan være smart at gøre alligevel for ens egen skyld, der sikrer, at man eksempelvis har en nogenlunde rigtig e-mail. eller at en bruger ikke blot hedder "t" til fornavn.
Du behøver ikke gøre noget for at sikre mod SQL-injection. Heller ikke for brugerens egen skyld. Hvis han hedder O'Brian, skal han vel have lov til det.
Men i den anden ende, i GUI-en, skal man naturligvis lave almindelig validering på (ikke)udfyldte felter, tekst hvor man forventer tal, osv. Men det har ingenting med SQL at gøre.
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.