Aquí hay un ejemplo mínimo de trabajo del problema que tengo. Ya sé que el error parece ser específico de mi servidor/configuración, pero todavía tengo curiosidad por saber qué está pasando. 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 haces 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 sí lo hace con cualquier otra cadena que se me ocurra. El problema parece estar en el 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 esto un problema de Apache? ¿Quizás php? ¿Cómo podría saberlo?
Encontré esto mientras realizaba una auditoría de seguridad en el sitio web. No hay ningún servidor SQL ejecutándose, pero la auditoría informa el problema. Y tengo curiosidad por saber 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 que no existe en mi servidor, siempre que el contenido de la publicación incluya algún campo con la cadena antes mencionada, la solicitud queda sin respuesta. Entonces parece que este es un problema de Apache.