Avatar billede hagger Nybegynder
28. maj 2010 - 19:08 Der 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å?
Avatar billede erikjacobsen Ekspert
28. maj 2010 - 19:15 #1
Nej, du skal ikke fjerne noget - det vil da være helt urimeligt.

Brug http://php.net/mysqli med parameters, se fx: http://dk.php.net/manual/en/mysqli-stmt.bind-param.php
Avatar billede hagger Nybegynder
28. maj 2010 - 19:25 #2
Kan du ikke skrive noget om, hvad man kan gøre?
Avatar billede erikjacobsen Ekspert
28. maj 2010 - 19:35 #3
Der er eksempler på php.net - hvad er du i tvivl om?
Avatar billede cronaldo Nybegynder
28. maj 2010 - 20:23 #4
Brug den indbyggede PHP-funktion, der hedder: mysql_real_escape_string()
Avatar billede hagger Nybegynder
30. maj 2010 - 13:22 #5
Kan i ikke prøve at lave en komplet php-side hvor i har sikret mod sql-injection? Så jeg kan se nøjagtigt hvordan man skal gøre..
Avatar billede cronaldo Nybegynder
30. maj 2010 - 17:11 #6
<?php

$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 />";
}

?>

Sådan? Eller hvad? :o)
Avatar billede hagger Nybegynder
30. maj 2010 - 22:40 #7
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?
Avatar billede cronaldo Nybegynder
30. maj 2010 - 23:55 #8
Det er mit udgangspunktet, ja - men mon ikke der er nogle huller et eller andet sted.. Men jeg er ret sikker på, at det er den optimale sikkerhed!
Avatar billede tuidoi Nybegynder
31. august 2010 - 23:03 #9
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.
Avatar billede erikjacobsen Ekspert
31. august 2010 - 23:07 #10
Prepared statements er rigeligt. SQL-injection er et SQL-problem, og skal løses i forbindelse med SQL.

Laver du både erstatning af ' med \' og prepared statements, så får du ekstra \-ere i output, med mindre du fjerner dem igen - Ebberød Bank.

Desuden har prepared statements den store fordel, at man kan læse direkte i koden at der er sikring mod SQL-injection.
Avatar billede tuidoi Nybegynder
02. september 2010 - 14:01 #11
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.
Avatar billede erikjacobsen Ekspert
02. september 2010 - 15:37 #12
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.
Avatar billede hagger Nybegynder
05. februar 2011 - 18:07 #13
...
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