Jump to content

Como nos proteger do SQL Injection?


Marco Antonio

Recommended Posts

Hoje vou falar um pouco sobre como funciona o SQL Injection e como podemos proceder para que nós não sejamos pegos por este tipo de vulnerabilidade.

O que é SQL Injection?

SQL Injection é uma técnica de injeção de código que explora uma vulnerabilidade de segurança localizada na camada de banco de dados (database layer) do site. Na prática é utilizada por hackers (ou não) para ter acesso ao banco de dados do site da vítima sem que ele precise de um login ou uma senha efetivamente para fazê-lo.

Como funciona o SQL Injection?

Para entendermos melhor como funcionam os ataques via injeção de códigos SQL (SQL Injection), vou utilizar um caso bem comum entre os programadores para que vocês se familiarizem com mais facilidade.

Pense em um formulário para login no sistema e uma consulta na base de dados para verificar se determinado usuário e senha existe em na base de dados.

Exemplo

SELECT usuario,senha FROM usuarios WHERE usuario = ‘igorescobar’ AND senha=’123456′

O ataque acontece justamente no ponto, aonde o usuário preenche o usuário e a senha no formulário de login do site. Se você não filtra todos os dados que vem de FORA para DENTRO da sua aplicação, você corre o risco de ser atacado.

Na prática o código fica algo parecido com isso:

SELECT usuario,senha FROM usuarios WHERE usuario = ‘$usuario’ AND senha=’$senha’;

Estas variáveis ($usuario e $senha) estão vindo do $_POST do seu formulário e o servidor iria interpretar assim:

SELECT usuario,senha FROM usuarios WHERE usuario = ‘igorescobar’ AND senha=’123456′;

Agora imagine que eu sou um usuário mal intencionado e desejo logar no servidor de vocês sem ser autorizado.

No campo senha vou inserir o seguinte conteúdo:

123456′ OR ‘a’='a

Vamos ver como fica?

SELECT usuario,senha FROM usuarios WHERE usuario = ‘igorescobar’ AND senha=’123456′ OR ‘a’='a’;

Quer outro exemplo? …

Agora no campo senha eu vou inserir o seguinte conteúdo:

123456′; DROP TABLE usuarios; –

Vamos ver como fica?

SELECT usuario,senha FROM usuarios WHERE usuario = ‘igorescobar’ AND senha=’123456′; DROP TABLE usuarios; –’;

Ok, agora você já esta pronto para passar no RH

O como eu me protejo dos ataques SQL Injection ?

Primeiro: Separe sempre a exibição de erros em 2 ambientes, o ambiente de desenvolvimento e o ambiente de produção. O ambiente de desenvolvimento pode ter qualquer tipo de erro emitido na tela, afinal, você precisa ver os erros para tratá-los, no ambiente de produção omita qualquer tipo de erro, qualquer erro pode ser uma pista para o hacker descobrir detalhes sobre o seu ambiente.

Segundo: Filtre todo o tipo de variável dados que vem de urls ou inputs de formulário $_GET ou $_POST para que nenhum dos dados imputados pelo usuário possa ser interpretado como parte da instrução SQL.

Vale lembrar que o certo seria utilizarmos PDO que já tem uma proteção definitiva contra isso, pois ele tem o acesso ao modelo do seu banco de dados e pode fazer muito melhor do que uma simples filtrarem genérica nos campos, ele pode filtrar cada campo dependendo do tipo de cada campo o que é muito melhor.

Caso você não use PDO, você pode utilizar também uma função chamada mysql_real_escape_string que também cumpre o que promete.

Solução definitiva para o SQL Injection

Está solução é válida apenas para as pessoas que não utiliza nenhuma das 2 (duas) soluções citadas acima

Mais informações: http://webinhost.com.br/blog/noticias-e-dicas-de-nosso-site/protecao-contra-o-sql-injection

Link to comment
Share on other sites

Isso não é a solução definitica para se proteger, SQLi não envolve somente a sua técnica citada a cima, e nem menos é utilizada.

Mais valeu por contribuir.

Poderia comentar algo complementar Jean, fiquei curioso...digo até mesmo pra pesquisar sobre.

AtarWeb.com.br • Hospedagem de Site + SSL Grátis
█ Revenda de Hospedagem CPanel e DirectAdmin SSD + SSL Grátis
Link to comment
Share on other sites

Realmente, a proteção do seu bd merece bastante estudo. Existem várias formas de se proteger do SQL injection.

Dando uma procurada dentre os sites desenvolvidos por mim aqui achei:

function ai($hs) {

$hs = preg_replace("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/i","",$hs);

$hs = trim($hs);

$hs = strip_tags($hs);

$hs = addslashes($hs);

return $hs;

}

você pode usar na variável que receber por get ou por post :)'

Link to comment
Share on other sites

chuvadenovembro,

Claro, a idéia inicial do nosso amigo está certo porém a técnico utilizada é muito antiga por que os webmasters e até por nós provedores do serviço de hospedagem estamos atualizando nossos serviços garantindo a segurança, a técnica onde ele se refere é o acesso ao usuário admin através de um comando que "burla" o banco de dados, o mais famoso que temos é o o '1 or 1' e '1 and 1=0' o número 1 representa o primeiro usuário do banco de dados conseqüente ao administrador do mesmo, está técnico é utilizada no campo de login e que hoje não é mais utilizada por nenhum pen-tester.

A técnica mais recente é a por injecção de comandos na URL do site, não sendo uma qualquer especialmente uma que tenha conexão ao banco de dados (site.com/noticia.php?id=05) se não for com conexão ao banco de dados se torna outra técnica por exemplo (site.com/index.php) que seria PHP Injection que hoje está praticamente extinta não se usa mais.

Para você saber se seu site é vulnerável basta acrescentar aspas simples ( ' ) no final da URL (ex.: site.com/noticia.php?id=05') se retornando algum erro ou modificação na página a mesma está vulnerável podendo ser explorada e obtendo todos os dados do banco de dados.

Se eu ver que o pessoal se interessa no assunto eu posso até criar um guia pra ajudar a segurança entre outras técnicas utilizadas além do SQL Injection, tais como Cross Site Scriping, Blind, Metasploit e etc... 8)

Link to comment
Share on other sites

Se eu ver que o pessoal se interessa no assunto eu posso até criar um guia pra ajudar a segurança entre outras técnicas utilizadas além do SQL Injection, tais como Cross Site Scriping, Blind, Metasploit e etc... 8)

Jean, o seu guia vai ajudar muitos aqui. Basta ter um texto simples de entender.

Fico aguardando! :)

Link to comment
Share on other sites

Jean, o seu guia vai ajudar muitos aqui. Basta ter um texto simples de entender.

Fico aguardando! :)

Sem querer abusar, se tiver direcionado p/ leigo, gostaria de um texto do genero sim, digo assim, toda vez que vejo algo falando p/ editar o arquivo httpd.conf, eu levo cerca de 15min pra lembrar onde ele está hehehehe.

Se tivesse algo no seu texto tratando com estes detalhes para acessar os arquivos que devem ser alterados eu ficaria bastante contente ;D

AtarWeb.com.br • Hospedagem de Site + SSL Grátis
█ Revenda de Hospedagem CPanel e DirectAdmin SSD + SSL Grátis
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...

Important Information

Do you agree with our terms?