¿Las declaraciones preparadas por PHP / SQLI necesitan un escape de caracteres especiales?

1

Estoy usando consultas php / mysqli como esta:

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

Hablando estrictamente Inyección SQL (no hay desbordamientos de búfer al ingresar 20,000 caracteres) ¿Debo realizar verificaciones adicionales para protegerme contra caracteres especiales como / -- o ' cuando ejecuto estas declaraciones preparadas? - ¿La declaración preparada realmente (99.9%) se encarga de este tipo de inyección de SQL?

He estado leyendo algunas de las otras publicaciones aquí sobre declaraciones preparadas y no obtengo una respuesta definitiva, ¿está bien solo para verificar la longitud de las entradas y luego leerlas a través de declaraciones como esta? m insertar directamente los datos del usuario en una base de datos? - ¿O es necesario hacer más?

    
pregunta Crizly 18.11.2014 - 22:08
fuente

1 respuesta

3

No es necesario realizar comprobaciones adicionales si está utilizando una declaración preparada con parámetros. Este es el estándar de la industria para prevenir la inyección SQL en PHP.

Con el ejemplo que proporcionó, estaría 100% protegido (no 99,9%) de la inyección de SQL (al menos en función de lo que sabemos hoy, quién sabe lo que depara el futuro).

Dicho esto, hay circunstancias en las que una declaración preparada parametrizada aún puede ser vulnerable a la inyección de SQL, pero que yo sepa, todo esto implica el uso de un SQL dinámico que no está utilizando aquí.

Puede ver la página de OWASP sobre la parametrización de consultas aquí .

    
respondido por el Abe Miessler 18.11.2014 - 22:46
fuente

Lea otras preguntas en las etiquetas