2010-12-06 17 views

Respuesta

27

Si usa PDO puede parametrizar sus consultas, eliminando la necesidad de evitar cualquier variable incluida.

Consulte here para obtener un excelente tutorial introductorio para PDO.

Usando PDO puede separar el SQL y los parámetros pasados ​​usando declaraciones preparadas, esto elimina la necesidad de escanear cadenas, ya que los dos se mantienen por separado y luego combinados en la ejecución, los parámetros se manejan automáticamente como picaduras, de la fuente anterior :

// where $dbh is your PDO connection 

    $stmt = $dbh->prepare("SELECT * FROM animals WHERE animal_id = :animal_id AND animal_name = :animal_name"); 

    /*** bind the paramaters ***/ 
    $stmt->bindParam(':animal_id', $animal_id, PDO::PARAM_INT); 
    $stmt->bindParam(':animal_name', $animal_name, PDO::PARAM_STR, 5); 

    /*** execute the prepared statement ***/ 
    $stmt->execute(); 

Nota: la desinfección se produce durante la unión ($stmt->bindParam)

Otros recursos variables:

http://net.tutsplus.com/tutorials/php/why-you-should-be-using-phps-pdo-for-database-access/

http://www.phpeveryday.com/articles/PDO-Prepared-Statement-P550.html

http://php.net/manual/en/pdo.prepared-statements.php

+0

Hola gracias. Ya lo sé, así que no necesito $ animal_id = mysql_real_escape_string ($ _ POST ['blabla']), ¿pero ahora puedo hacer $ animal_id = $ _ POST ['blabla'] ahora? – Karem

+0

Si está utilizando una declaración preparada, puede vincular directamente la variable sin la necesidad de escaparla como una cadena ... usando PDO, la ejecuta/maneja como una cadena de todos modos, evitando que cualquier inyección intente – SW4

+0

Entonces, para más simple responde, si! – SW4

4

El punto importante cuando se utiliza PDO es:

DOP sólo desinfectar para SQL, no para su aplicación.

Así que sí, para escrituras, como INSERTAR o ACTUALIZAR, es especialmente crítico filtrar primero sus datos y desinfectarlos para otras cosas (eliminación de etiquetas HTML, JavaScript, etc.).

<?php 
$pdo = new PDO(...); 
$stmt = $pdo->prepare('UPDATE users SET name = :name WHERE id = :id'); 
$id = filter_input(INPUT_GET, 'id', FILTER_SANITIZE_NUMBER_INT); // <-- filter your data first 
$name = filter_input(INPUT_GET, 'name', FILTER_SANITIZE_STRING); // <-- filter your data first 
$stmt->bindParam(':id', $id, PDO::PARAM_INT); // <-- Automatically sanitized for SQL by PDO 
$stmt->bindParam(':name', $name, PDO::PARAM_STR); // <-- Automatically sanitized for SQL by PDO 
$stmt->execute(); 

Sin desinfectar la entrada del usuario, un hacker podría haber salvado algunos javascript en su base de datos y luego, cuando la producción en su sitio que se habría expuesto a una amenaza!

http://www.phptherightway.com/#pdo_extension

Cuestiones relacionadas