Aqui está um exemplo mínimo de trabalho do problema que tenho. Já sei que o erro parece ser específico do meu servidor/configuração, mas ainda estou curioso para saber 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, ele imprime o array com o valor da caixa de entrada) com esta exceção: se a string que eu digito for
VALUE';WAITFOR DELAY '00:00:24';--
o formulário não é processado. Excluir 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 acontece com qualquer outra string que eu possa imaginar. O problema parece estar no lado do servidor, pois o Fiddler mostra a solicitação POST com conteúdo
j=VALUE%27%3BWAITFOR+DELAY+%2700%3A00%3A24%27%3B--
e eu poderia reproduzi-lo em diferentes navegadores e plataformas diferentes. Este é um problema do Apache? Talvez php? Como eu poderia saber?
Descobri isso durante 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 string específica desencadeia tal comportamento.
Editar:caso alguém esteja interessado, acabei de notar que o comportamento descrito acima não depende em nada do código php. Na verdade, se eu enviar via Fiddler uma solicitação POST para uma página inexistente no meu servidor, desde que o conteúdo da postagem inclua algum campo com a string mencionada, a solicitação fica sem resposta. Parece que este é um problema do Apache.