Aqui está um exemplo mínimo de trabalho do problema que tenho. Eu sei até agora o erro parece ser particular do meu servidor / configuração, mas ainda estou curioso sobre o que está acontecendo. Existem dois arquivos, m1.php e 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);
?>
Tudo funciona como esperado (quando você clica em ok, imprime a matriz com o valor da caixa de entrada) com esta exceção: se a string que eu digitar for
VALUE';WAITFOR DELAY '00:00:24';--
o formulário não é processado. A exclusão de apenas um caractere da string acima funciona sem problemas.
Verificando os logs do servidor, quando a string acima é a entrada, nenhuma solicitação POST aparece no log, enquanto ocorre com qualquer outra string que eu possa imaginar. O problema parece ser do lado do servidor, pois o Fiddler mostra a solicitação POST com o conteúdo
j=VALUE%27%3BWAITFOR+DELAY+%2700%3A00%3A24%27%3B--
e eu poderia reproduzi-lo em diferentes navegadores de diferentes plataformas. Isso é um problema do Apache? Talvez php? Como eu poderia dizer?
Eu encontrei isso durante a execução de uma auditoria de segurança no site. Não há nenhum servidor SQL em execução, mas a auditoria relata o problema. E estou curioso para saber por que essa sequência específica aciona esse comportamento.
Editar: caso alguém esteja interessado, acabei de perceber que o comportamento descrito acima não depende do código php. Na verdade, se eu enviar por meio do Fiddler uma solicitação POST para uma página não existente no meu servidor, desde que o conteúdo da postagem inclua algum campo com a sequência mencionada acima, a solicitação ficará sem resposta. Então parece que isso é um problema do Apache.
Tags php apache-http-server