O exemplo que acabamos de ver mostra que o utilizador que quer atacar o sistema não precisa conhecer a estrutura do seu BD (o nome dos campos da tabela).
Na maioria das vezes, para efetuar os ataques, eles tem que conhecer a estrutura do seu BD, mas imagine que o seu sistema é um pacote código aberto disponível na internet, que utiliza acesso a BD, o que acontece é que estes sistemas como são códigos abertos e de domínio público, muito facilmente os utilizadores mal intencionados tem um acesso a estrutura do BD, estudam as suas falhas, verificam as vulnerabilidades, e facilmente criam códigos SQL que permitem atacar o sistema.
Por isso quando implementar um sistema que é código aberto, não confie em nenhuma entrada que vem do cliente para o sistema com acesso a BD, praticamente nada, nem campos ocultos (hidden), pois estes podem ser conhecidos pelo utilizador e serem enviados pelo explorador.
As seguintes ações ajudam a prevenir contra os ataques, mas tente fazer sempre mais alguma coisa para impedir os ataques:
- Sempre utilize usuários com poucos privilégios para entrar no sistema, haja como um utilizador de Linux no seu sistema e não como o do Windows.
- Utilize funções para validar as entradas que o sistema espera, se for texto, número ou dígitos, no PHP existem várias funções de validação, por exemplo is_numeric(), ctype_digit(), pode até mudar o tipo com settype() sem o usuário perceber.
- Utilize as funções mysql_escape_string() e sql_escape_string() para adicionar aspas para cada valor que não numérico. Se um mecanismo de escape de caracter específico para o seu BD não for disponível, as funções addslashes() e str_replace() podem ser utilizadas.
- Não apresente mensagens de erros que possuam informação sobre o BD.
É importante também utilizar funções específicas de SGBD para o tratamento de queries enviados, o que diminui a compatibilidade do código fonte para operação com outros sistemas de banco de dados.
Importante também é evitar que seja mostrada mensagem de erro em um servidor Web, pelo fato de que estes apresentam nas mensagens de erros ou avisos caminhos de pastas do sistema de arquivos e informações a respeito do BD, podendo comprometer a segurança do sistema.
Para evitar que sejam mostradas mensagens de erros e avisos do PHP, é necessário a configuração da diretiva display_errors para Off no ficheiro de configurações do PHP (php.ini).
É da responsabilidade do desenvolvedor estar atento às possíveis falhas de segurança existentes nos script que produz, principalmente quando está a desenvolver sistemas de informação, onde a informação é algo de valioso. Este é um ramo muito sensível para qualquer desenvolvedor, tem de estar atento a isso, porque só a funcionalidade do sistema não basta, o que importa é a garantia da estabilidade do sistema, mantendo os dados legíveis e fidedignos a terceiros.