Evitando ataques de negação de serviço (DoS) em PHP

Métodos eficazes para mitigar ataques de negação de serviço (DoS) em PHP, protegendo o desempenho e a disponibilidade da aplicação.

Introdução

Os ataques de negação de serviço (Denial of Service - DoS) sobrecarregam um servidor com um grande volume de requisições, tornando a aplicação inacessível. Quando esse ataque é coordenado por várias máquinas, chamamos de Distributed Denial of Service (DDoS). Aplicações PHP devem ser projetadas para minimizar os impactos desses ataques.

1. Limitando requisições por IP

Uma maneira de reduzir o impacto de ataques DoS é limitar o número de requisições consecutivas do mesmo IP.

session_start();
if (!isset($_SESSION['tentativas'])) {
    $_SESSION['tentativas'] = 0;
}
$_SESSION['tentativas']++;
if ($_SESSION['tentativas'] > 10) {
    die('Muitas requisições. Tente novamente mais tarde.');
}

Isso impede que um mesmo usuário faça um número excessivo de requisições em curto prazo.

2. Bloqueando IPs suspeitos via .htaccess

Podemos bloquear acessos suspeitos diretamente no Apache adicionando IPs à lista de bloqueio:

<Limit GET POST>
    Order Deny,Allow
    Deny from 192.168.1.100
</Limit>

Isso impede que IPs maliciosos façam requisições ao servidor.

3. Implementando Rate Limiting com Redis

Uma abordagem mais eficiente é usar Redis para armazenar a contagem de requisições por IP:

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);
$ip = $_SERVER['REMOTE_ADDR'];
$tentativas = $redis->get($ip) ?? 0;
if ($tentativas >= 10) {
    die('Muitas requisições. Tente novamente mais tarde.');
}
$redis->incr($ip);
$redis->expire($ip, 60);

Isso limita requisições excessivas, armazenando a contagem por IP por 60 segundos.

4. Utilizando um Firewall e CDN

Firewalls de aplicação web (WAFs) e redes de distribuição de conteúdo (CDNs) como Cloudflare ajudam a mitigar ataques de DDoS ao filtrar tráfego malicioso.

5. Definindo limites no servidor

Configurar o Apache ou Nginx para restringir o número de conexões simultâneas pode ajudar a evitar sobrecarga:

No Apache:

LimitRequestBody 1024000

No Nginx:

limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;

Isso limita requisições a 10 por segundo por IP.

Conclusão

Ataques DoS e DDoS podem prejudicar a disponibilidade de uma aplicação PHP. Implementar rate limiting, bloquear IPs suspeitos e usar serviços como CDN e WAF são estratégias essenciais para reduzir os impactos desses ataques.

A negação de serviço é uma das ameaças mais comuns contra aplicações web. Em ataques DoS, um único atacante sobrecarrega um site com requisições excessivas. Em ataques DDoS, múltiplos dispositivos comprometidos são usados para gerar tráfego em massa.

A melhor maneira de mitigar esses ataques é implementar rate limiting para restringir requisições excessivas e utilizar serviços externos, como Cloudflare, para bloquear tráfego malicioso antes que ele chegue ao servidor.

Além disso, configurar o servidor corretamente e monitorar logs de acesso são práticas fundamentais para identificar e responder a tentativas de DoS antes que afetem a disponibilidade da aplicação.

Algumas aplicações:

  • Impedir sobrecarga do servidor causada por tráfego malicioso.
  • Garantir que usuários legítimos possam acessar a aplicação sem interrupções.
  • Bloquear ataques automatizados que tentam derrubar o site.
  • Reduzir custos operacionais evitando consumo excessivo de recursos.

Dicas para quem está começando

  • Use Redis ou sessões para limitar requisições por IP.
  • Bloqueie IPs suspeitos com .htaccess ou regras no firewall.
  • Configure um CDN como Cloudflare para mitigar ataques DDoS.
  • Monitore logs do servidor para identificar padrões suspeitos.
  • Defina limites no Apache ou Nginx para controlar requisições simultâneas.

Contribuições de Renata Oliveira

Compartilhe este tutorial: Como evitar ataques de negação de serviço (DoS) em aplicações PHP?

Compartilhe este tutorial

Continue aprendendo:

Como usar Content Security Policy (CSP) para aumentar a segurança em aplicações PHP?

Métodos para implementar Content Security Policy (CSP) no PHP, evitando ataques de injeção de scripts maliciosos e reforçando a segurança da aplicação.

Tutorial anterior

Como proteger APIs PHP contra abusos e acessos não autorizados?

Métodos para proteger APIs PHP contra abusos, garantindo autenticação segura, controle de requisições e mitigação de ataques maliciosos.

Próximo tutorial