Código:
Con Postgresql, para prevenir inyecciones SQL usaba la función "pg_escape_string", la cual escapa los caracteres peligrosos. Antes de aplicar dicha función yo siempre realizaba, en caso de tener "magic quotes" activo, un stripslashes, para después escapar con la función especifica. Algo como:$param = (get_magic_quotes_gpc())?stripslashes($_POST['param']):$_POST['param']; $sql = 'SELECT * FROM tabla WHERE nombre='.pg_escape_string($param); pg_query($sql) or die('Consulta fallida: ' . pg_last_error());
Código:
Evitando que así que se escape 2 veces.$param = (get_magic_quotes_gpc())?stripslashes($_POST['param']):$_POST['param'];
El tema es que ahora quiero empezar a trabajar con PDO. Mi duda es ¿Debo igualmente evaluar "magic quotes" para ver si aplicar un stripslashes antes de usar las funciones de escape de PDO ("quote" o "bindParam", en caso de usar "prepare")?
Yo creo que no es necesario. Que las funciones de PDO se encargan de dicha comprobación por sí solas, pero no tengo seguridad de ello. Espero que alguien me pueda decir.
En otras palabras, ¿con esto me bastaría, y me aseguraría de prevenir errores como escapes dobles (que los parámetros quedasen de la forma 'aa\\' en vez de 'aa\'a')?
Código:
o con "prepare"$param = $_POST['param']; $sql = 'SELECT * FROM tabla WHERE nombre='.$dbh->quote($param); $results = $dbh->query($sql);
Código:
Saludos. $param = $_POST['param']; $sql = 'SELECT * FROM tabla WHERE nombre=:nombre'; $stmt = $dbh->prepare($sql); $stmt->setFetchMode(PDO::FETCH_OBJ); $stmt->bindParam(':nombre', $param,PDO::PARAM_STR); $stmt->execute(); $results = $stmt->fetchAll();