Evitar inyección SQL en consultas MySQL con php

Con la inyección SQL es fácil que puedan acceder a muchos datos de tu base de datos e incluso modificarlos, por lo que es muy importante evitar esta vulnerabilidad.
Viene muy bien explicado en la Wikipedia que es y en que consiste.
Para evitar la inyección SQL tan solo tendremos que modificar un poco el código php, donde antes teniamos:
$query = 'SELECT * FROM users WHERE name = "' . $username. '"';
cambiamos $username por mysql_real_escape_string($username):
SELECT * FROM users WHERE name = "'.mysql_real_escape_string($username).'"
quedando nuestra base de datos protegida de la mayoría de los ataques. También he visto por ahí que si nuestra consulta trabaja con instrucciones como LIKE, GRANT ó REVOKE es mas seguro:
addcslashes(mysql_real_escape_string($username),'%_')

23/04/20010: Otra manera, no se si es mejor que la anterior, pero parece protegernos de lo básico. También sirve para prevenir que se pongan scripts, muy útil para filtrar los comentarios.
function strip_all($string)                                            
{
 $string = htmlentities($string);
 $string = strip_tags($string);
 $string = stripslashes($string);
 $string = addslashes($string);
 return $string;
}

O en una linea:
function strip_all($string)                                            
{
 return addslashes(stripslashes(strip_tags(htmlentities($string))));
}

Comentarios