Sql injectie voorkomen, ok. Maar hoe behoud ik werkbare formulieren?

Met ‘mysql_real_escape_string‘ kun je eenvoudig enkele quotes en dubbele quotes (en \x00, \n, \r, \, ‘, ” en \x1a) ‘escapen’. Hiermee voorkom je sql injectie. Volgens php.net moet deze functie altijd gebruikt worden wanneer er data vanuit een form in een database geplaatst wordt.

Niet echt lastig:
$myVar = mysql_real_escape_string($_POST["naam"]);
$myQuery = “UPDATE table SET naam = ‘” . $myVar . “‘”;

So far, so good.

Wanneer je een gebruiker de gelegenheid biedt om zijn ingevoerde content aan te kunnen passen via een formulier, kunnen er vervelende problemen ontstaan.

<input name=”naam” type=”text” value=”<?=$myRs[0]["naam"]?>” />

De output is namelijk voorzien van slashes. Je text veld bevat dan bijvoorbeeld [waarde\'s]. Niet echt handig. Zeker niet als je deze input een keer of drie submit. Je krijgt dan: [waarde\\\'s].

De functie ‘stripslashes‘ is dan een voor de hand liggende oplossing. Alleen krijg je dan een probleem met je dubbele quotes. Als je deze text probeert in te voeren [Deze "fiets" is van sjaak], zal dat niet lukken. Je krijgt het slechts voor elkaar om [Deze ] in te voeren. De eerste dubbele quote wordt namelijk gezien als afsluiter van de value in je input tag.

De enige oplossing die ik kon bedenken die in alle gevallen werkt is ‘htmlentities‘.

Dus: <input name=”naam” type=”text” value=”<?=htmlentities($myRs[0]["naam"])?>” />

Je kunt dan echt helemaal los met quotes en dubbele quotes. Alles gaat de database is.

  1. No comments yet.
(will not be published)
Subscribe to comments feed
  1. No trackbacks yet.

SetPageWidth