Inseguridad potencial para no desinfectar las variables antes de INSERTAR con una declaración preparada en PDO

2

Utilizo la DOP con una declaración preparada cuando me conecto a mi base de datos, y lo hago porque se considera una forma segura de hacerlo, pero una cosa que no pude evitar fue que la información enviada desde un formulario puede ser perjudicial. Si solo lo declaras como:

$entered_email_adress = $_POST['email']; 

antes de insertar los datos en la base de datos? ¿Debe limpiar los datos enviados de todos modos, o no hay razón para hacerlo?

    
pregunta DannyCruzeira 13.08.2012 - 14:54
fuente

2 respuestas

6

Suponiendo que está colocando los datos de entrada en un parámetro en la consulta, es seguro contra las inyecciones de SQL. Todo lo que inserte en un parámetro se trata solo como datos y no puede formar parte de la sintaxis de la consulta. Sin embargo, la concatenación de cadenas no es segura.

Así que esto es seguro:

$pdo->query('select * from users where user_id = ?', $_POST['id']);

Esto no es:

$pdo->query('select * from users where user_id = ' . $_POST['id']);

Ten en cuenta que deberás hacer escape de salida adecuado si quieres use los datos en una página web más adelante, para detener la inyección de marcado y los ataques de scripts entre sitios (XSS).

    
respondido por el Polynomial 13.08.2012 - 15:39
fuente
1

En mi experiencia personal y de lo que he sido llevado a comprender por personas más conocedoras que yo, no es necesario el saneamiento cuando se usa la DOP en lo que respecta a la Inyección de SQL. De hecho, algunas soluciones de saneamiento tienen un impacto negativo (cambian los datos de una manera que quizás no quiera que se cambie).

Si bien no es necesario que desinfecte los datos que ingresan a la base de datos mientras usa los DOP, aún es importante que desinfecte los datos que salen. Por ejemplo, si alguien establece su nombre de usuario en

<script>send_data_to('Russia')</script>

y acaba de hacer eco de los datos sin sanear al mundo, eso podría ser un problema.

    
respondido por el Will Meldon 13.08.2012 - 15:38
fuente

Lea otras preguntas en las etiquetas