Vous êtes sur la page 1sur 14

SQL Injection

Felipe Nathan Welter Vitor Emanuel Batista ECP381

SQL Structured Query Language


Largamente utilizado em aplicaes web que necessitam guardar informaes como usurios, documentos e etc. Ameaas de segurana que se aproveitam de falhas com bases de dados via SQL esto sujeitas.

Como ocorre?
A injeo de SQL ocorre quando o atacante consegue inserir uma srie de instrues SQL dentro de uma consulta (query) atravs da manipulao das entrada de dados de uma aplicao. O ataque pode envolver uma mudana na consulta SQL original.

Tipos
Manipulao SQL Modificar a query original incluindo novas queries: - WHERE Select * from login where usuario= ' ' and senha= ' ' Select * from login where usuario= ' ' or 'c'='c' -- and senha= ' ' - Usar UNION Select * from projetos where codigo = ' ' Select * from projetos where codigo= ' ' UNION Select * from projetos -- ' - DROP TABLE Select * from alunos where codigo = ' ' Select * from alunos where codigo = ' '; drop table alunos -- '

Tipos
Erros SQL Inserindo uma lgica errada na query possvel capturar informaes pelo erro. O erro pode revelar nomes de tabelas ou colunas. Microsoft OLE DB Provider for SQL Server (0x8002F09) Error converting nvarchar value 'CartaoCredito' to a column of data type int.

Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft] [ODBC SQL Server Driver] [SQL Server] Column 'usuarios.codigo' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause.

Tipos
Chamada de funes Um ataque pode afetar banco de dados ou sistemas operacionais utilizando funes no SQL. Select * from tabela where codigo = ' ' and senha = ' ' Select * from tabela where codigo = ' '; shutdown with nowait; -- ' and senha = ' '

A clusula SHUTDOWN WITH NO WAIT no SQL possibilita o fechamento do servio no sistema operacional.

Como evitar?
Valide SEMPRE todo e qualquer tipo de dado que seu projeto for receber, seja via formulrio (POST) ou via query string (GET).

Como evitar?
Estabelecer uma poltica de segurana rgida e criteriosa limitando o acesso dos seus usurios. Limitar a entrada de texto para o usurio no formulrio de entrada de dados. Se o campo usurio tem tamanho 10, s permitir a digitao de 10 caracteres. Tratamento adequado dos erros, no permitindo que mensagens de erro exponham informaes sobre a estrutura dos dados.

Como evitar?
Criar um log para auditoria dos erros ocorridos e das operaes mais importantes da aplicao. Validar as entradas de usurio testando tipo, comprimento, formato e intervalo.

Nunca construir instrues SQL ou Transact-SQL diretamente da entrada do usurio.

Como evitar?
Criptografia de dados: pode usar MD5, SHA1 ou BASE64, sendo que os dois primeiros so de mo nica e no podem ser revertidos ao estado anterior.

Validao de entrada de dados no formulrio, desconsiderando caracteres como (), (--) e (;) e palavras como insert, drop, delete ou xp.

Como evitar?
addslashes() Combinar addslashes() ao receber os dados: o comando adiciona uma barra \ antes de qualquer caracter que possa gerar erro SQL.
olha s vou colocar uma ' e uma " aqui no meu texto e vai dar um erro por causa das " '... olha s vou colocar uma \' e uma \" aqui no meu texto e vai dar um erro por causa das \" \'...

Como evitar?
mysql_real_escape_string() Usar mysql_real_escape_string() ao receber os dados, faz escapar os caracteres especiais.
$usuario = mysql_real_escape_string($_POST['usuario']); $senha = mysql_real_escape_string($_POST['senha']);

strip_tags() Usar strip_tags() retira todas as tags HTML e PHP dos dados fornecidos.
$usuario = strip_tags($_POST['usuario']); $senha = strip_tags($_POST['senha']);

Como evitar?
Combinar diversas funes em uma s funo muito mais abrangente.

Referncias
http://www.zoomdigital.com.br/sql-injection-o-que-e-e-como-evitar/ http://www.plugmasters.com.br/sys/materias/267/1/Evitando-SQL-Injection http://srcware.com/programacao/como-evitar-sql-injection-em-net/ http://forum.imasters.com.br/topic/327892-sql-injection-como-evitar/

http://phpbrasil.com/phorum/read.php?1,63275
http://www.macoratti.net/sql_inj.htm http://www.macoratti.net/sql_inj.htm http://www.docstoc.com/docs/54734137/SQL-INJECTION http://pt.wikipedia.org/wiki/Inje%C3%A7%C3%A3o_de_SQL

Vous aimerez peut-être aussi