SQL Injection – Como se defender ? 2/2

Primeiramente se você ainda não leu o post sobre “SQL Injection – O que é ? Como é feito ?”, aconselhamos que você dê uma olhada, pois para o entendimento deste post abaixo, será necessário ter uma noção do que é o SQL Injection.

Como proteger-se do famoso SQL Injection ?

Como todos já viram no post anterior o SQL Injection é o nome dado a manipulação de dados SQL através de objetos input.
A partir de agora você vai aprender a se defender deste deface dentro e fora do nosso querido Scriptcase.

Defesa através do Scriptcase

Poucas pessoas conhecem, mas o scriptcase possui uma lista de macros que permitem ao usuário manipular eventos, botões das aplicações, controle de segurança, efetuar operações com datas, etc… Entre todas estas macros poderemos encontrar a macro “sc_sql_injection”.
Esta é responsável por cuidar da segurança de nossos campos inputs contra o famoso sql injection.

Vamos agora entender como ela funciona.

Abaixo podemos observar como o select se comporta com relação aos dados inseridos no input, isto utilizando este select:

A imagem acima mostra detalhes do que já havíamos visto no post anterior, mas observe agora a imagem de baixo e veja como a macro funciona dentro do nosso select:

Então, antes sem a utilização da macro “sc_sql_injection” nosso código ficava aberto a interpretações, agora com a utilização da macro de forma correta, o Scriptcase percebeu rapidamente que estava sendo injetado um valor anormal e colocou uma barra invertida antes do valor do campo login, desta forma a validação do select ficaria:

SQL gerado:

Interpretação:

Me traga tudo da tabela sec_users onde o login é igual a \ ou 1 é igual a 1 e o restante comenta.

Lógicamente não teremos nenhum login chamado “\”, portanto o injection da pessoa estará bloqueado.

Por isso é sempre importante a utilização desta macro para buscar ou inserir informações no banco de dados.
Para saber mais sobre a forma de utilização desta macro acesse: http://www.scriptcase.com.br/docs/pt_br/v81/manual_mp.htm#macros-scriptcase/macros-scriptcase

Como se proteger fora do Scriptcase, no PHP puro

Para que se esteja livre da utilização da SQL Injection, certas providências devem ser tomadas. Algumas das ações serão realizadas no servidor de banco de dados, outras devem ser garantidas pelo código fonte, ou seja, no nosso caso o PHP.

Podemos utilizar através do PHP a função addslashes(), que por sinal é a mesma função utilizada pela macro “sc_sql_injection”.
Esta função tem por objetivo inserir uma barra invertida antes de cada aspa simples e aspa dupla encontrada na variável passada, este processo é conhecido como “escape”. Se a diretiva de configuração do PHP “magic_quotes_gpc” estiver ativada, o escape é realizado automaticamente sobre os dados de COOKIES e dados recebidos através dos métodos GET e POST. Neste caso, não deve ser efetuado o tratamento com addslashes(). A função get_magic_quotes_gpc(), disponível nas versões do PHP a partir da 3.0.6, retorna a configuração atual da diretiva magic_quotes_gpc. Veja o exemplo de como usar esta função:

Outra forma de se proteger também é através do MYSQLI no PHP. Se você ainda utiliza as funções da lib mysql(), “CORRA”, porque além de quase não ser mais utilizada, ela é totalmente vulnerável a invasões desse tipo. Nela, todas as queries são passadas manualmente. Mas é claro que eu não falaria para correr desta lib sem citar uma alternativa, a classe mysqli, esta usa parâmetros em “bind” para não haver nenhuma concatenação direta e nesse meio do “bind” a classe trata o input para nada funcionar como uma injeção.

Veja um pequeno exemplo de como utilizar:

 

Entendendo o código:

Obviamente nunca estaremos 100% protegidos, pois se as maiores empresas como Facebook, Google e muitos outros que investem milhões em segurança de dados e são realmente eficientes no que diz respeito ao assunto, conseguem se livrar do ataques de hackers imaginem nós programadores comuns. Mas é claro que sempre podemos dificultar as coisas.

Então é isso pessoal, espero que tenham gostado do post. Aconselho que para melhor entendimento deêm uma lida na documentação das funções e alternativas citadas acima.

Para entender mais assista o vídeo:

Fontes: http://imasters.com.br, http://www.devmedia.com.br, https://mathmesquita.me, http://php.net/

 

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

© 2018 Camila Moreira | ScrollMe by AccessPress Themes