Básicamente, cada vez que utiliza algunos datos no seguros (entrada del usuario, valor de una base de datos, un archivo o un sitio web externo, es decir, cualquier dato que no esté 100 % seguro de que es seguro) en una consulta SQL, debe escapar usando mysql_real_escape_cadena . Tenga en cuenta que según OWASP , esta función no es segura para escapar de nombres de tablas dinámicas (pero esto es mucho menos común que la inserción de entrada de usuario "básica").
Le sugiero que eche un vistazo al artículo completo de OWASP sobre inyección de SQL , y también para navegar por el resto del sitio web. Es una gran fuente de información sobre seguridad en aplicaciones web.
En mi opinión, la forma preferida de prevenir la inyección de SQL es usar declaraciones preparadas .
Recuerde que si elige usar mysql_real_escape_string()
solo funciona cuando se usa dentro de una cadena delimitada por comillas. Nunca lo use en valores sin comillas. Esto incluye valores numéricos; en su lugar, valide que la entrada del usuario sea realmente numérica.