Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

GustavoTSouza

Utilizar preg_replace para evitar SQL INJECTION

Recommended Posts

Estou tentando algumas formas de evitar SQL INJECTION no sistema e estou começando pelo mais simples, remover palavras impróprias das querys SQL.

 

Já utilizo a seguinte expressão regular:

<?
preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$string_sql);
?>

Porém ainda está faltando a situação dos seguintes dados vem para a query:

AND 1=1

AND 1=2

OR 1=1

OR 1=2

 

O mais simples eu já fiz, porém não encontrei uma maneira de incluir os comando AND e OR na expressão simples que criei do 0:

preg_replace("/[0-9]=[0-9]/", "", $string);

 

Se algum conseguir dar uma ajuda, principalmente se for implementado o que falta

primeira expressão. Infelizmente usei muito pouco expressão regular.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Implementei o PDO, e solicitei mais um relatório de vulnerabilidade.

Algumas coisas mudaram porém menos do que eu esperava. Segue algumas tentativas que continuam apresentando erro:

Vulnerabilidade: Blind SQL Injection
-Blind SQL Injection vulnerability found Injectable request #: 16 Injected item: GET: id True Injection value :499 and 1=1 False Injection
value :499 and 1=0 Detection value:
-Sql Injection com SLEEP, wait for delay e DBMS_LOCK.SLEEP
Vulnerabilidade: Cross-Site Scripting (sinceramente não entendi o que me foi apresentado)
Mensagem: Cross-Site Scripting vulnerability found Injected item: GET: texto_pesquisa Injection value: ">
Realmente essas vulnerabilidade não são corrigidas com o PDO? Será que fiz alguma implementação indevida?
Principalmente nas questões do Blind SQL injecttion, tem como corrigir essa falha com o PDO?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como está seu código?

 

Eu costumo tratar o recebimento das variáveis globais $_GET, $_POST, $_SESSION etc com as funções filter_* (filter_var(), filter_input() etc), e depois trato com PDO na hora de persistir no banco. Um tipo de validação bacana é usar as funções ctype do PHP, para prevenir certas dores de cabeça e deixar uma validação mais rígida no sistema. Exemplo:

 

if ( !ctype_digit( $_POST['id'] ) ) {
    throw new RunTimeException( 'ID inválido' );
}

Se o cara digitar qualquer coisa que não é pertinente pra você, você já trava ele ali...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenho uma função que faço alguns tratamentos críticos:

 

function anti_injection($sql)
	{
		 //echo $sql;
		 $array_str = array("SLEEP","DBMS_LOCK.SLEEP", "waitfor delay","DBMS_LOCK.","DBMS_LOCK");
		 #$array_str = array("");
		 
		 $aux = $sql;
		 for($i=0;$i<count($array_str); $i++)
		 {
			$sql = str_ireplace($array_str[$i], "", $aux);
		 	//echo $sql."<br>";
		 }
		
		// remove palavras que contenham sintaxe sql
		$sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
		$sql = trim($sql);//limpa espaços vazio
		$sql = strip_tags($sql);//tira tags html e php
		$sql = addslashes($sql);//Adiciona barras invertidas a uma string
		return $sql;
	}

A parte de Vulnerabilidade: Cross-Site Scripting, eu sinceramente não sei o que posso fazer para arrumar, e acabei não entendendo a resposta deles no relatório.

"Mensagem: Cross-Site Scripting vulnerability found Injected item: GET: texto_pesquisa Injection value: ">"

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.