sql >> Base de Datos >  >> RDS >> Mysql

¿Qué es PDO, cómo se relaciona con la inyección de SQL y por qué debería usar esto?

PDO - Objetos de datos de PHP es una capa de acceso a la base de datos que proporciona un método uniforme de acceso a múltiples bases de datos.

No tiene en cuenta la sintaxis específica de la base de datos, pero puede permitir que el proceso de cambio de bases de datos y plataformas sea bastante sencillo, simplemente cambiando la cadena de conexión en muchos casos.

Las declaraciones preparadas/consultas parametrizadas son suficientes para evitar la inyección de primer orden en esa declaración. Si usa SQL dinámico sin marcar en cualquier otro lugar de su aplicación, aún es vulnerable a la inyección de segundo orden.

La inyección de segundo orden significa que los datos han pasado por la base de datos una vez antes de incluirse en una consulta, y es mucho más difícil de lograr. AFAIK, casi nunca ves ataques reales de segundo orden, ya que generalmente es más fácil ingresar mediante ingeniería social.

PDO es un poco más lento que mysql _*. Pero tiene una gran portabilidad. PDO proporciona una interfaz única en múltiples bases de datos. Eso significa que puede usar varias bases de datos sin usar mysql_query para mysql, mssql_query para SQL Server, etc. Simplemente use algo como $db->query("INSERT INTO...") siempre. No importa qué controlador de base de datos esté utilizando.

Por lo tanto, para proyectos más grandes o portátiles, es preferible PDO. Incluso Zend Framework usa DOP.

Inyección SQL

Inyección SQL

La inyección SQL es una técnica en la que los usuarios maliciosos pueden inyectar comandos SQL en una declaración SQL, a través de la entrada de la página web.

Los comandos SQL inyectados pueden alterar la declaración SQL y comprometer la seguridad de una aplicación web.

¿Las declaraciones preparadas de PDO son suficientes para evitar la inyección de SQL?

La respuesta corta es NO, Los preparativos de PDO no lo defenderán de todos los posibles ataques de inyección de SQL. Ataques ejemplo

¿Cómo usar DOP?

Un ejemplo:

$stmt = $dbh->prepare("SELECT * FROM tables WHERE names = :name");
$stmt->execute(array(':name' => $name));

Referencias