Um tipo de ataque que pode causar uma parada bruta do PHP (e um possível DDoS) é uma “chuva” de submits, talvez uma tentativa de brute-force onde um (ou mais) formulário é preenchido e enviado várias vezes consecutivas na tentativa de derrubar o servidor ou só descobrir uma senha.
Isso acontece pois, dependendo do servidor e das configurações do mesmo, o PHP não vai conseguir dar conta de tantas requisições, vai ficar perdido e vai parar… Há como evitar esse tipo de “ataque” fazendo alguns ajustes no servidor e instalando alguns mods do Apache… Mas há também como se proteger disso direto no PHP, e é disso que vou falar hoje.
Antes de tudo vamos falar de algo óbvio, mas que pouca gente deve ter percebido: a variável global $_POST existe sempre… Independente se houve ou não um submit antes. Quando você está navegando pelo site o $_POST (que é um array) vai ser sempre vazio, sem elementos, e quando houverem dados para o PHP processar (depois de um submit) ele vai ser um array com elementos.
Então, no começo do nosso script, precisamos verificar se há algum valor dentro de $_POST, se ele não está vazio:
Agora que já sabemos quando houve um submit, vamos verificar se existe um valor salvo na sessão que nos informará a hora exata do último submit aceito pelo sistema (em UNIX TIMESTAMP)… Por questão de otimização de código também vamos colocar, direto no mesmo IF, uma verificação que compara esse horario buscado na sessão (caso ele exista) com o horário atual… Vamos direto ao script que vai ficar mais fácil de entender:
<?php
($agora - $segundos))) {
// O submit será bloqueado
}
}
?>






