Aquí hay un ejemplo mínimo de trabajo del problema que tengo. Sé que el error parece ser particular de mi servidor / configuración, pero todavía tengo curiosidad sobre lo que está sucediendo. Hay dos archivos, m1.php y m2.php:
m1.php
<form action="m2.php" method="post">
<br> <input type="text" name="j" />
<input type="submit" VALUE="Ok" />
</form>
m2.php
<?php
print_r($_POST);
?>
Todo funciona como se esperaba (cuando hace clic en Aceptar, imprime la matriz con el valor del cuadro de entrada) con esta excepción: si la cadena que escribo es
VALUE';WAITFOR DELAY '00:00:24';--
El formulario no se procesa. Eliminar solo un carácter de la cadena anterior funciona sin problemas.
Al verificar los registros del servidor, cuando la cadena anterior es la entrada, no aparece ninguna solicitud POST en el registro, mientras que lo hace con cualquier otra cadena que se me ocurra. El problema parece ser del lado del servidor, ya que Fiddler muestra la solicitud POST con contenido
j=VALUE%27%3BWAITFOR+DELAY+%2700%3A00%3A24%27%3B--
y pude reproducirlo en diferentes navegadores desde diferentes plataformas. ¿Es este un problema de Apache? Tal vez php? ¿Cómo podría saberlo?
Encontré esto mientras ejecutaba una auditoría de seguridad en el sitio web. No hay ningún servidor SQL en ejecución, pero la auditoría informa el problema. Y tengo curiosidad por qué esa cadena en particular desencadena tal comportamiento.
Editar: en caso de que alguien esté interesado, acabo de notar que el comportamiento descrito anteriormente no depende en absoluto del código php. De hecho, si envío a través de Fiddler una solicitud POST a una página no existente en mi servidor, siempre que el contenido de la publicación incluya algún campo con la cadena mencionada anteriormente, la solicitud queda sin respuesta. Entonces parece que este es un problema de Apache.
fuente
mod_security
? Configure una instancia de apache separada con solo 1-2 procesos en ejecución, adjúntelosstrace
(usando la-p PID
opción) para ver qué está haciendo mientras procesa esa solicitud. Funciona en mi apache / php sin ningún problema, por lo que debe ser algo en su configuración.