[Tip] Anti SQL injection
Ik kwam onlangs deze functie tegen array_map, waarmee je erg gemakkelijk al je input van addslashes voorzien met een enkele regel ( Om SQL injection tegen te gaan ).
Omdat het niet echt een toegevoegde waarde heeft in het script lib, post ik het hier even omdat mensen er misschien nog wat aan hebben.
Scheeld je heel wat addslashes of escape's in je querys ;)
Edit2:
even naar mysql_real_escape_string veranderd, je moet hiervoor wel eerst verbinding maken met de DB om het te gebruiken.
Edit:
Ook voor de mensen die een foreach gebruiken is dit netter ;) Of het verschil maakt qua snelheid weet ik niet.
Omdat het niet echt een toegevoegde waarde heeft in het script lib, post ik het hier even omdat mensen er misschien nog wat aan hebben.
Scheeld je heel wat addslashes of escape's in je querys ;)
Edit2:
even naar mysql_real_escape_string veranderd, je moet hiervoor wel eerst verbinding maken met de DB om het te gebruiken.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
// Deze regels gewoon even bovenaan elke pagina includen of even toevoegen aan je config bestand.
$_POST = array_map("mysql_real_escape_string", $_POST);
$_GET = array_map("mysql_real_escape_string", $_GET);
$_REQUEST = array_map("mysql_real_escape_string", $_REQUEST);
$_COOKIE = array_map("mysql_real_escape_string", $_COOKIE);
$_SERVER = array_map("mysql_real_escape_string", $_SERVER);
?>
// Deze regels gewoon even bovenaan elke pagina includen of even toevoegen aan je config bestand.
$_POST = array_map("mysql_real_escape_string", $_POST);
$_GET = array_map("mysql_real_escape_string", $_GET);
$_REQUEST = array_map("mysql_real_escape_string", $_REQUEST);
$_COOKIE = array_map("mysql_real_escape_string", $_COOKIE);
$_SERVER = array_map("mysql_real_escape_string", $_SERVER);
?>
Edit:
Ook voor de mensen die een foreach gebruiken is dit netter ;) Of het verschil maakt qua snelheid weet ik niet.
Gewijzigd op 01/01/1970 01:00:00 door Thijs X
Who, thanks lekker makkelijk. Kan ik dit ook in een functie verwerken? Of moet ik dan een aparte pagina met die code includen?
@ Kalle,
Daar ga ik eens even naar kijken, maar voor de mensen die geen mogelijkheid hebben om gebruik te maken van PHP5 ( en dus ook geen PDO ) is dit een erg makkelijke oplossing.
@ Robin,
Het is al een functie je hoeft het alleen maar ergens bovenaan aan je pagina's te includen. Ik neem aan dat je iets van een config bestand hebt ( die je in elke pagina include ) om verbinding te maken met je MySQL database.
Dan zou je deze 5 regels ergens op die pagina kunnen plaatsen zodat je ze altijd include.
Daar ga ik eens even naar kijken, maar voor de mensen die geen mogelijkheid hebben om gebruik te maken van PHP5 ( en dus ook geen PDO ) is dit een erg makkelijke oplossing.
@ Robin,
Het is al een functie je hoeft het alleen maar ergens bovenaan aan je pagina's te includen. Ik neem aan dat je iets van een config bestand hebt ( die je in elke pagina include ) om verbinding te maken met je MySQL database.
Dan zou je deze 5 regels ergens op die pagina kunnen plaatsen zodat je ze altijd include.
addslashes? Waarom zou je de data naar de bliksem willen helpen? Nooit gebruiken, heb je niks aan. Gebruik dan in elk geval mysql_real_escape_string().
En wanneer je eind november 2007 nog steeds geen PHP 5 kunt gebruiken, dan wordt het hoogste tijd om over te stappen. Over een kleine 6 weken is het over en sluiten met de ondersteuning van versie 4. Zie het ontbreken van PDO dan ook niet als een beperking, maar een reden om nú een andere hostingprovider op te zoeken of zelf een update uit te voeren.
En wanneer je eind november 2007 nog steeds geen PHP 5 kunt gebruiken, dan wordt het hoogste tijd om over te stappen. Over een kleine 6 weken is het over en sluiten met de ondersteuning van versie 4. Zie het ontbreken van PDO dan ook niet als een beperking, maar een reden om nú een andere hostingprovider op te zoeken of zelf een update uit te voeren.
Het kan idd ook met mysql_real_escape_string ipv addslashes, maar wat is het verschil ?
addslashes gooit een keiharde slash in de database die je er ook weer uit moet halen. mysql_real_escape_string zet een slash in de query zodat deze niet mislukt. Er komt géén slash in de database te staan, die hoef je er dus ook niet meer uit te halen.
addslashes kun je dus onmogelijk gebruiken zonder ook stripslashes te gebruiken. Vergeet je dat een keer, kan de boel hopeloos fout gaan, met ontelbare slashes als eindresultaat... Nooit meer gebruiken dus, er zijn betere/slimmere oplossingen beschikbaar.
addslashes kun je dus onmogelijk gebruiken zonder ook stripslashes te gebruiken. Vergeet je dat een keer, kan de boel hopeloos fout gaan, met ontelbare slashes als eindresultaat... Nooit meer gebruiken dus, er zijn betere/slimmere oplossingen beschikbaar.
Ah, dat is inderdaad een stuk beter.
Heb het gelijk even in mn bovenstaande post veranderd.
Heb het gelijk even in mn bovenstaande post veranderd.
Dit doet me denken aan magic_quotes_gpc...
... en alle ellende die daar mee gepaard ging.
Ik ben van mening dat het escapen of het typecasten van invoer vlak voordat het de query in gaat de handigste manier is. Of nog beter, zoals Kalle al zei, PDO gebruiken en helemaal geen gebruikers-invoer meer in je query hoeven verwerken.
... en alle ellende die daar mee gepaard ging.
Ik ben van mening dat het escapen of het typecasten van invoer vlak voordat het de query in gaat de handigste manier is. Of nog beter, zoals Kalle al zei, PDO gebruiken en helemaal geen gebruikers-invoer meer in je query hoeven verwerken.
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -




