Dit voor eens en voor altijd op te lossen.
Ik heb een <form> <input id='naam' value=''/> </form>

Nu ga ik hem uitlezen:
$name = mysql_real_escape_string(addslashes($_POST['naam'])) ;

Is dit voldoende om je $name te beschermen?
Of is alleen mysql_real_escape_string(); al wel voldoende om narigheid tegen te gaan?
volgens mij alleen mysql_real_escape_string(); al genoeg
mysql_real_escape_string() is inderdaad al genoeg.
Je dient
1. geen overbodige variabelen aan te maken
2. mysql_real_escape_string pas je alleen toe in ene SQL statement en nergens anders
Verder zal $_POST['naam'] niet bestaan omdat je input geen 'name' attribuut heeft.
Ook wel interessant:
http://www.byte.nl/docs/Php-Sql-Injection.html

Hierin staat dat mysql_real_escape_string en addslashes allebei kunnen worden gebruikt, maar er staat niet dat je ze beiden moet gebruiken ;)

En ook nog iets over het voorbereiden van een sql opdracht :O
@santhe
'id' moet 'name' zijn =)

@noppes
Maar als ik nu $name weer mee wil laten sturen in een $_GET, dus niet ga gebruiken voor SQL, is $name = mysql_real_escape_string($_POST['naam']) ook goed?

<form> <input name='naam' value=''/> </form>

//uitlezen
$database_server = mysql_connect("*", "*", "*");
mysql_select_db("*", $database_server) ;

$name = mysql_real_escape_string($_POST['naam']) ;

$link = '<a href="http://www.domein.nl/index.php?naam='.$name.'"; >Link naar naam</a>' ;
echo $link ;
Er is niet zoiets als een 'veilige variabele'. Variabelen zijn veilig in een bepaalde context. Zo is een var in SQL pas veilig na mysql_real_escape(), een andere escape functie of prepared statements, maar in html pas veilig na htmlentities().
In XML pas in een CDATA blok en zo voorts...

Verder is addslashes mijns inziens alleen nuttig wanneer deze slashes je data niet vervuilen, zoals in Javascript.
Het is voldoende je te beschermen tegen injection.
mysql_real_escape_string (of eventueel mysql_escape_string) zorgt er voor dat er geen verrassingen zijn bij het inserten van data.

Probeer je data verder zo puur mogelijk op te slaan in je database.

Jij moet dan wel telkens je data beschermen bij het uitlezen (SELECT * ...). Dat gaat dan weer om andere problemen, zoals html elementen die men probeert tussen de berichten te steken. Die kunnen bv. ook javascript bevatten.

Dit kan met strip_tags(). Ook stripslashes() zal je waarschijnlijk nodig hebben.

Nog iets: casten.
Indien je weet dat iets een integer moet zijn, cast het dan. Bv. $_POST['aantal'] = (int) $_POST['aantal'];
Het ergste wat dan kan gebeuren, is dat je een 0 krijgt, indien het geen getal is.

Reageren