Workflow

SQL Injection – Engenharia de Software

EXEMPLOS:

EXEMPLO 1 (manipular dados pela url)
http://www.burbao.com.br/produtos/produto?id=77;DELETE FROM produtos

Esse é um dos métodos mais utilizados, onde o invasor se aproveita de informações inseridas na própria url do site.

As precauções a serem tomadas nesse caso são: 1° limpar as variáveis que passam pelo código usado na url (com essa prática o “;” seria apagado e se efetuaria a injeção sql no site); 2° a melhor maneira de se passar um código ou alguma informação pela url, é utilizando alguma codificação, no mínimo algum padrão da própria linguagem como por exemplo do php base64_encode, assim é impossível manipular os dados sem um conversor dessa codificação em mãos.

EXEMPLO 2
<FORM ACTION=”http://www. burbao.com/busca.cfm” METHOD=”post”>
<INPUT TYPE=”hidden” NAME=”string_busca” VALUE=”;DROP TABLE noticias”>
<INPUT TYPE=”submit”>
</FORM>

Já no exemplo 2, temos um método bastante usado pelas pessoas para manipular premiações de promoções realizadas em campanhas publicitárias pela web. Através desse método, o usuário tem a possibilidade de injetar algum valor estratégico diretamente no banco de dados.

A uma única precaução que inibe esse tipo de ação é a verificação da página pela qual foi postado o formulário. Essa página deve ser comparada através de uma validação que comprova que a página anterior começa exatamente com os mesmos caracteres que a página do formulário inicial.

EXEMPLO 3
<FORM ACTION=”http://www. burbao.com/login/logar.cfm” METHOD=”post”>
<INPUT TYPE=”hidden” NAME=”username” VALUE=”qqcoisa”>
<INPUT TYPE=”hidden” NAME=”senha” VALUE=”;AND 1=1″>
<INPUT TYPE=”submit”>
</FORM>

Neste exemplo 3, utiliza-se a mesma estratégia do anterior, a diferença é que, esse, compara valores com os do banco de dados para efetuar um login, por exemplo. Já no exemplo anterior, o usuário manipula diretamente as informações do banco, podendo editar ou excluir.

A precaução que inibe essa ação é a mesma do exemplo anterior.

EXEMPLO 4

O quarto exemplo é o mais prático de efetuar login, invadir senhas e entrar em áreas protegidas. Pois é um método de invasão cujo único trabalho do usuário em questão é prever o furo da linguagem em questão.

Aqui temos um exemplo em php de como o programa interpreta os dados recebidos pelo formulário e executa a string sql.

Este é o exemplo do formulário a ser preenchido pelo usuário. Caso ele escreva sua senha igual a do exemplo, olhe abaixo como ficará a mesma string na query a ser executada:

Isto resultará em uma query verdadeira, e trará a lista de todos os usuários cadastrados, ou seja, o usuário acertou a senha e pode entrar no sistema.

A forma de prevenir tal ação é a mesma da primeira descrita, limpando os campos a serem recebidos pelo formulário. Nesse caso o campo “’” seria limpo.

BOAS PRÁTICAS

Para manter um código seguro, segue abaixo algumas práticas muito importantes a serem seguidas:

1) Jamais deixar amostra os erros da sua aplicação! Desligue o debug info! Crie uma função debug que mostre estes erros em um ambiente diferente do que o usuário acessa.

2) Validar TODOS os campos recebidos por formulários e url´s. Nessa validação insira esses caracteres sempre retirando pontos e vírgulas, aspas, e aspas duplas, além de comandos de slq injection como DELETE, INSERT, entre outros.

3) Criar boas políticas de acesso às informações, dividindo até as tabelas para escrever e alterar para visualização de dados. Sempre criando regras de acesso para cada usuário, inibindo completamente que um tipo de usuário possa interferir nas ações do outro.

4) Não menos importante é ter um backup dos dados, para se caso tudo der errado, você possa recuperar as informações enquanto bloqueia o furo de segurança. Uma boa prática é criar um aplicativo que gere backup diário e envia por e-mail para o administrador do sistema.

————–

Links de segurança:

pdf: http://brainbulb.com/talks/php-security-briefing.pdf (php seguro – ótimo!!)

pdf:  http://santarem.procergs.com.br/tutorial/PROCERGS-PHP-Seguro.pdf (php seguro)

sites:

www.php.net/security
www.phpsec.org
www.owasp.org
www.securityfocus.com
www.phpsecure.info
www.net-force.nl

asp – http://www.totalsecurity.com.br/article.php?sid=732 -

————–