Le dichiarazioni preparate in PHP / SQLI richiedono l'escape di caratteri speciali?

1

Sto usando query php / mysqli come questa:

$stmt = $con -> prepare("INSERT INTO 'comments' ('uid', 'article_id', 'status', 'comment') VALUES (?, ?, ?, ?)");
$stmt -> bind_param('iiis', $uid, $articleId, $status, $comment);  
$stmt -> execute();

Parlando rigorosamente di SQL Injection (nessun buffer trabocca dall'inserimento di 20.000 caratteri) devo fare controlli extra per evitare particolari caratteri come / -- o ' quando esegui queste istruzioni preparate? - La dichiarazione preparata veramente (99,9%) si prende cura di questo tipo di iniezione sql?

Ho letto alcuni degli altri post qui sulle dichiarazioni preparate e non ho una risposta definitiva, è giusto controllare solo la lunghezza degli input e lanciarli attraverso affermazioni come questa dove io m inserendo direttamente i dati dell'utente in un db? - Oppure è necessario fare di più?

    
posta Crizly 18.11.2014 - 22:08
fonte

1 risposta

3

Non è necessario eseguire controlli aggiuntivi se si utilizza una dichiarazione preparata con parametri. Questo è lo standard del settore per prevenire SQL Injection in PHP.

Con l'esempio che hai fornito sarai protetto al 100% (non al 99,9%) da SQL Injection (almeno sulla base di ciò che conosciamo oggi, chissà cosa riserva il futuro).

Detto questo, ci sono sono circostanze in cui un'istruzione parametrizzata preparata può essere ancora vulnerabile a SQL Injection, ma a mia conoscenza tutto ciò comporta l'uso di SQL dinamico che non stai usando qui.

Puoi vedere la pagina di OWASP sulla parametrizzazione delle query qui .

    
risposta data 18.11.2014 - 22:46
fonte

Leggi altre domande sui tag