Vous êtes sur la page 1sur 5

SIDII Seminrio Interno da Disciplina de Introduo a Informtica 1

Injeo SQL
Douglas Liberalesso da Silva, Jean Carlo Gonsiorkiewcz, Mauricio Melo
dliberalesso@gmail.com, gonsiorkiewcz@gmail.com, mauricio_melo8@hotmail.com
Universidade Regional Integrada do Alto Uruguai e das Misses - URI

Resumo
Este trabalho se destina anlise de uma das formas como se do os ataques aplicaes web, a Injeo
SQL (SQL Injection). Para isso se faz necessrio a compreenso, primeiramente, do que so bancos de dados,
em especial os bancos de dados relacionais, e do que a Linguagem de Consulta Estruturada SQL
(Structured Query Langugage). A partir da, este trabalho muda o foco para a Injeo SQL dando exemplos de
manipulaes de URLs e parmetros de campos de formulrios capazes de modificar o comando SQL
originalmente pensado pelo desenvolvedor da aplicao. Por fim, sugere-se a tomada de medidas para
minimizar o risco corrido.
Palavras-Chave: banco de dados, banco de dados relacionais, SQL, injeo SQL, aplicaes web.
1. Introduo
Com o surgimento do protocolo HTTP (HyperText Transfer Protocol), as pginas web se tornaram cada
mais populares e um dos principais meios de comunicao.
Enquanto, no princpio, as pginas eram desenvolvidas essencialmente em HTML (HyperText Markup
Language), caracterizando-as como pginas estticas, sem iterao com o usurio, o decorrer do tempo trouxe
pginas web que passaram a oferecer iterao.
Uma das formas de oferecer essa iterao se d com a armazenagem e recuperao de dados de bancos de
dados. Essas aplicaes web, muitas vezes desenvolvidas com pressa e sem a devida ateno segurana dos
dados, passaram a ser alvos de crackers pelo mundo todo.
No decorrer das prximas linhas iremos analisar uma das formas como se do esses ataques, passando por
uma compreenso bsica do que so bancos de dados, em especial bancos de dados relacionais, e do que a
Linguagem de Consulta Estruturada (SQL Structured Query Language), para, ento, adentrarmos o tema que
foco deste estudo: a Injeo SQL.
2. Bancos de Dados
De acordo com C. J. Date, um banco de dados uma coleo de dados persistentes utilizados pelos
sistemas de aplicao de uma determinada organizao [DAT 00]. Considerando que esses bancos de dados
esto normalmente acompanhados de um sistema gerenciador, conhecido como Sistema Gerenciador de Banco
de Dados SGBD, entendemos pertinente o ensinamento trazido por Abraham Silberschatz, Henry F. Korth e
S. Sudarshan:
Um Sistema Gerenciador de Banco de Dados (SGBD) constitudo por um conjunto de dados
associados a um conjunto de programas para acesso a esses dados. O conjunto de dados comumente
chamado de banco de dados, contm informaes sobre uma empresa particular. [SIL 99, p. 1].
2.1. O Modelo Relacional
Um dos modelos adotados pelos SGBD's para o gerenciamento dos dados armazenados, o mais aceito hoje
em dia, o modelo relacional, cuja principal proposio a de que todos os dados sejam representados como

relaes matemticas, isto , um subconjunto do produto cartesiano de n conjuntos.
Assim, nos bancos de dados relacionais representados por uma coleo de tabelas, uma linha e uma tabela
representam um relacionamento entre um conjunto de valores.
Uma vez que esta tabela uma coleo de tais relacionamentos h uma estreita correspondncia
entre o conceito de tabela e o conceito matemtico de relao, a partir das quais se origina o nome
desse modelo de base de dados. [SIL 99, p. 61].
Uma coleo de estrutura de dados ou relaes (tabelas); uma coleo de operadores (lgebra e clculo
relacionais); e uma coleo de restries de integridade, compem os modelos de tabelas em uma estrutura de
dados [CON 99].
Apresentamos, a seguir, um exemplo, bem simples, da descrio de algumas relaes e seus atributos em
um banco de dados:
Cliente (ID Cliente, Nome, Endereo, Cidade, Estado, CEP, Telefone);
Pedido de Compra (Nmero do pedido, ID Cliente, Fatura, Data do pedido, Data prometida, Status);
Item do Pedido (Nmero do pedido, Nmero do item, Cdigo do produto, Quantidade);
Nota Fiscal (Nmero da nota, ID Cliente, Nmero do pedido, Data, Status); e
Item da Nota Fiscal (Nmero da nota, Nmero do item, Cdigo do produto, Quantidade vendida).
Os atributos em negrito e sublinhados representam chaves candidatas, enquanto que os itens sublinhados,
mas sem negrito, so as chaves estrangeiras. Por sua vez, uma chave primria, que um identificador nico
garantidor de que nenhuma linha ser duplicada, escolhida arbitrariamente dentre as chaves candidatas.
A tabela a seguir representa um exemplo da relao Cliente.
Tab.1 Exemplo de relao Cliente
ID Cliente Nome CEP Telefone
123456789 Joo da Silva 98801123 55123456789
111111111 Pedro de Alcntara 98801321 55987654321
222222222 Maria Isabel 98801456 55789456123

Havendo a tentativa de insero de um novo cliente cujo ID seja 222222222, teremos uma violao do
projeto da relao, uma vez que o ID Cliente uma chave primria e j existem um cliente com aquele ID,
ficando a cargo do SGBD, portanto, a rejeio dessa transao. O SGBD dever, ainda, emitir uma mensagem
de erro de violao de integridade.
Necessrio destacarmos, tambm, a existncia das chamadas chaves estrangeiras, que so condies de
integridade que garantem que o valor de um determinado atributo obtido de uma chave candidata de outra
tabela. Em nosso exemplo, na tabela (relao) Nota Fiscal, o atributo (coluna) ID Cliente uma chave
estrangeira.
SIDII Seminrio Interno da Disciplina de Introduo a Informtica 3

Ento, para obtermos todos os pedidos do cliente 222222222, poderemos consultar o banco de dados de
forma que esse nos retorne todas a linhas constantes na tabela Pedido de Compra com ID Cliente igual a
222222222, agrupando essa tabela com a relao de itens de pedido baseado no Nmero do pedido.
3. Linguagem de Consulta Estruturada (SQL)
A Linguagem de Consulta Estruturada SQL, do ingls Structured Query Language, uma linguagem de
pesquisa declarativa para bancos de dados relacionais, sendo, conforme C. J. Date, a linguagem padro para o
manuseio de bancos de dados relacionais [DAT 00].
Criado pela IBM Research nos idos de 1970, o SQL inspirou diversos dialetos. Essa expanso levou
necessidade de se criar um padro para a linguagem, tarefa que coube ao Instituto Nacional Americano de
Padres ANSI (American National Standards Institute) em 1986 e Organizao Internacional para
Padronizao ISO (International Organization for Standardization) em 1987.
Listamos aqui, de forma no exaustiva, os SGBD's que fazem uso do SQL: Ingres, MySQL, Oracle,
PostgreSQL e SQLite.
O SQL nos permite manipular dados atravs dos comandos:
SELECT, que especifica uma consulta no banco de dados;
INSERT, usado para adicionar uma linha em uma determinada tabela;
UPDATE, utilizado para alterar uma linha de dados em uma tabela;
DELETE, que remove filas existentes de uma tabela especfica;
BEGIN WORK, destinado a marcar o comeo de uma transao, que poder ser finalizada ou no;
COMMIT, que grava todas as mudanas; e, finalmente,
ROLLBACK, comando que descarta as mudanas existentes desde o ltimo commit ou rollback.
Tais comandos constituem a chamada Linguagem de Manipulao de Dados DML (Data Manipulation
Language) que, conforme Silberschatz, Korth e Sudarshan [...] abrange uma linguagem de consulta baseado
tanto na lgebra relacional quanto no clculo relacional [...] e utilizada tanto para selecionar, inserir, atualizar
e apagar dados [SIL 99, p. 110].
A linguagem padro para o manuseio de dados relacionais nos permite, ainda, definir novas relaes ou
exclu-las. Chamamos essa categoria de Linguagem de Definio de Dados DDL (Data Definition
Language), a qual normalmente possui extenses proprietrias nos sistemas comerciais. Para isso, fazemos uso
dos comandos principais:
CREATE, que cria um objeto (tabela) dentro da base de dados; e
DROP, comando que apaga um determinado objeto da base da dados.
Outros comandos DDL podem ser ALTER TABLE, CREATE INDEX, ALTER INDEX, DROP INDEX,
CREATE VIEW, e DROP VIEW.
Existem, por fim, comandos destinados ao controle de quem tem acesso a determinados dados,
categorizados como Linguagem de Controle de Dados DCL (Data Control Language), que controlam
aspectos relacionados autorizao de dados e a licenas de usurios para controlar quem tem aceso para ver

ou manipular dados. So exemplos dessa categoria os comandos GRANT e REVOKE, que garantem e revogam
permisses, respectivamente.
4. Injeo SQL
A partir da insero de comandos SQL, a tcnica batizada de Injeo SQL, cujo objetivo o de passar
comandos diretamente a um banco de dados, conseguindo assim acesso no autorizado ao ambiente e s
informaes l armazenadas, obtm vantagem sobre o cdigo inseguro que roda em determinada aplicao web.
Apesar de ser gritante a necessidade de implementao de uma proteo contra este tipo de ataque, h um
nmero elevado de sistemas conectados internet que ainda esto sujeitos tcnica e, portanto, so vulnerveis
[JOE 03]. Exemplo disso so as listas de sites vulnerveis que se pode obter atravs de uma simples pesquisa
em mecanismos de busca, tais como o Google.
As tecnologias vulnerveis a este tipo de ataque so as que utilizam linguagens dinmicas, como ASP e
PHP, sendo que a nica ferramente necessria para se perpetrar o ataque um navegador de internet.
Uma aplicao que aceita a insero de uma sria de comandos SQL como parmetros de um formulrio,
por exemplo, e no filtra caracteres estranhos apropriadamente, uma aplicao vulnervel ao ataque de
injeo SQL.
Vejamos o seguinte exemplo:
sql_query=Select ProductName, ProductDescription FROM Products WHERE
ProductNumber = & Request.QueryString(ProductID)
O cdigo acima recebe um valor informado em um campo de formulrio chamado ProductID, que ao ser
preenchido pelo usurio gera a seguinte URL (informamos o nmero 12)
http://.../.../produtos.php?productid=12 e a seguinte consulta:
SELECT ProductName, ProductDescription FROM Products Where ProductNumber = 12
Esse cdigo gera um relatrio do banco de dados, com o nome de todos os produtos e sua respectiva
descrio cujo nmero seja 12.
Ao alterar a URL ou inseris um comando SQL no prprio campo do formulrio, um usurio mal
intencionado pode verificar se a informao passada na varivel ProductID filtrada ou validada. Vejamos,
por exemplo, a URL http://.../.../produtos.php?productid=12 or 1=1, que efetua a seguinte consulta:
SELECT ProductName, ProductDescription FROM Products Where ProductNumber = 12 or
1=1
Considerando que a expresso lgica 1=1 sempre VERDADEIRA, todos os dados das colunas
'ProductName' e 'ProductDescription' ser retornados.
Alm disso, o invasor pode ultrapassar a barreira de uma simples consulta ao banco de dados, inserindo
outros dados e, ainda, apagando ou modificando os j existentes. O smbolo ;, por exemplo, se destina ao
envio de vrios comandos para o servidor de uma s vez, o que permite ao invasor executar um comando
apagando toda a tabela de produtos com a seguinte URL:
http://.../.../produtos.php?productid=12;DROP TABLE Products.
SIDII Seminrio Interno da Disciplina de Introduo a Informtica 5

Outro exemplo a URL http://.../.../produtos.php?productid=12;UNION SELECT username,
password FROM Users, que retorna uma lista contentos todos os usurios cadastrados no sistema e suas
respectivas senhas.
Vemos, assim, a necessidade latente de validarmos o input fornecido pelo usurio, filtrando e escapando
smbolos como o ; e, ainda, modificando mensagens de erros que so exibidas ao usurios final, dentre outras
medidas, a exemplo de:
Rejeio de dados conhecidos como invlidos;
Aceitao de apenas dados sabidamente validos;
Restrio de acesso ao banco de dados;
Registro dos acessos;
Envio de e-mails de alerta; e,
Bloqueio do IP ofensor;
Precisamos, portanto, definir e implementar mecanismos mais eficientes para apoias as atividade que
envolvem a segurana da informao com a qual trabalhamos.
5. Referncias
[CON 99] CONNOLLY, Thomas; CAROLYN, Begg; e STRACHAN, Anne. Database Systems, A Pratical
Approach to Design, Implementation and Management. Addison-Wesley, 2nd Edition, 1999.
[DAT 00] DATE, C. J. Introduo a sistemas de Bancos de Dados. Rio de Janeiro: Campus, 2000.
[JOE 03] JOELSCAMBRAY, Mike Shema. Segurana contra hackers: Aplicaes WEB. Futura, 2003.
[SIL 99] SILBERSCHATZ, Abraham; KORTH, Henry; SUDARSHAN, S. Sistema de Banco de Dados.
So Paulo: Makron Books, 1999.

Vous aimerez peut-être aussi