Cita:
Iniciado por Max_4 Con la funcion htmlspecialchars() se evita que los usuario hagan inyección SQL? o hay que tomar mas precacuciones en los formularios?
Sí, se podría, primero utilizando htmlspecialchars() para guardar el dato en la BD o para consultar ese dato en la BD, pero, el problema está en que tendría que decodificar cuando, habiendo guardado ese dato, quisieras decodificar ese dato, teniendo que pasar todos los datos por htmlspecialchars_decode().
¿Es conveniente? No, incrementarías notablemente el tiempo de ejecución en una web de alto tráfico.
¿Entonces qué es lo mejor? Utilizar lo que PHP te ofrece:
1-mysqli_real_escape_string()
2-PDO prepare y PDO Statement ->
http://php.net/manual/es/pdo.prepare.php
dice lo siguiente en PDO prepare:
Cita: Llamar a PDO::prepare() y a PDOStatement::execute() para sentencias que serán ejecutadas en múltiples ocasiones con diferentes parámetros optimiza el rendimiento de la aplicación permitiendo al driver negociar en lado del cliente y/o servidor el almacenamiento en caché del plan de consulta y meta información, y ayuda a prevenir inyecciones SQL eliminando la necesidad de entrecomillar manualmente los parámetros.
Teniendo solamente que recoger el dato por GET o POST y ya el propio PHP escapa los caracteres que considere peligrosos.
Entonces lo implementas y te olvidas de tener que confeccionar nada que tenga que contemplar infinidad de escenarios respecto al SQL injection, quitándote tiempo y rendimiento de la aplicación.