tipos reales pagina inyeccion injection hackear evitar ejemplos ejemplo comandos php mysql regex sql-injection

php - pagina - sql injection ejemplos reales



Evitar la inyección de SQL en un SQL-regex generado por el usuario (3)

Estoy creando un sitio donde el usuario desafortunadamente tiene que proporcionar una expresión regular para ser utilizada en una cláusula MySQL WHERE. Y, por supuesto, tengo que validar la entrada del usuario para evitar la inyección de SQL. El sitio está hecho en PHP, y uso la siguiente expresión regular para verificar mi expresión regular:

/^([^/////']|///.)*$/

Esto es doblemente escapado debido a la forma en que PHP maneja las expresiones regulares. La forma en que se supone que debe funcionar es hacer coincidir solo las expresiones regulares seguras, sin comillas simples sin escindir. Pero siendo en su mayoría autodidacta, me gustaría saber si esta es una forma segura de hacerlo.


Debería pasar la cadena a través de mysql_escape_string o mysql_real_escape_string .

Sin embargo, sería cauteloso si acepto cualquier expresión regular antigua, ya que algunos de ellos pueden ejecutarse durante mucho tiempo y pueden bloquear tu servidor de base de datos.

Desde la sintaxis del patrón :

Tenga cuidado con los patrones que contienen repeticiones indefinidas anidadas. Puede llevar mucho tiempo ejecutarlos cuando se aplica a una cadena que no coincide. Considere el fragmento de patrón (a +) *

Esto puede coincidir con "aaaa" en 33 formas diferentes, y este número aumenta muy rápidamente a medida que la cuerda se alarga.


Si es solo para los propósitos de mostrar esta expresión de registro, entonces la mayoría de los programas simplemente cifran el valor HTML y lo almacenan en el DB y luego el decodificador en el camino de salida. De nuevo, solo para propósitos de Display, si necesita usar el reg exp que se envía, esto no funcionará.

También sé que hay un método en el que la persona que intenta inyectar escribe SQL, lo convierte en varbinary y envía el comando exec con la representación base 64 de la consulta con la que me han tocado en el pasado.


Si usa declaraciones preparadas, la inyección de SQL será imposible. Siempre debe usar declaraciones preparadas.

Sin embargo, Roborg hace una excelente observación sobre expresiones caras.