Um firewall não pode impedir todos os ataques de injeção de SQL porque opera em um nível de rede, inspecionando o tráfego de rede com base em endereços IP, portas e, às vezes, protocolos. A injeção de SQL, no entanto, é um ataque no nível da aplicação. O firewall não "vê" o código SQL malicioso incorporado na solicitação HTTP ou em outros dados do aplicativo.
Aqui está um colapso:
*
Limitações do firewall: Os firewalls examinam o *envelope *da comunicação de rede, não o conteúdo *. Eles podem bloquear as conexões de endereços IP específicos ou com base nos números de porta (como bloquear todas as conexões com a porta 3306, a porta MySQL padrão), mas essa é uma abordagem de enrolamento amplo. Um atacante sofisticado poderia usar outras portas ou métodos para ignorar essas regras simples. Eles não podem inspecionar a carga útil de dados para comandos SQL maliciosos.
*
A injeção de SQL ocorre dentro do aplicativo: O ataque acontece depois que o firewall já permitiu a conexão. O atacante injeta código SQL malicioso em um formulário da Web ou outro campo de entrada. Esse código é passado para o servidor de banco de dados *pelo próprio aplicativo *, do qual o firewall não tem conhecimento. O firewall não entende o contexto dos dados do aplicativo.
*
Ofuscação de dados: Os invasores podem usar técnicas para ofuscar o código de injeção do SQL, dificultando a detecção de firewalls avançados. Isso pode envolver a codificação ou o uso de caracteres incomuns.
Em suma, um firewall é uma primeira linha de defesa, mas não é uma bala de prata contra vulnerabilidades no nível do aplicativo, como a injeção de SQL. As medidas adequadas de segurança no nível do aplicativo, como consultas parametrizadas, validação de entrada e codificação de saída, são cruciais para impedir a injeção de SQL. Os firewalls de aplicativos da Web (WAFS) podem fornecer proteção adicional inspecionando o tráfego de aplicativos para padrões conhecidos de injeção de SQL, mas mesmo os WAFs não podem pegar todos os ataques.