Skip to content

Instantly share code, notes, and snippets.

@BoscoBecker
Last active May 6, 2019 18:56
Show Gist options
  • Save BoscoBecker/785cec62614d0b3f88bbeee2dd538e9f to your computer and use it in GitHub Desktop.
Save BoscoBecker/785cec62614d0b3f88bbeee2dd538e9f to your computer and use it in GitHub Desktop.
Escape for Delphi, Function em pascal que verifica consultas contendo Injeção de SQL
function EscapeSQLInjection(text: String): Boolean;
var
i : Integer;
/// Esse método tem como objetivo garantir via filtragem
/// a segurança do tratamento de dados pelo usuário e otimização de consultas SQL.
/// Caso o texto passado como parâmetro da pesquisa tenha caracteres
/// maliciosos ele me retornará um TRUE, caso contrário retorna FALSE, isto é
/// já saberei e evitarei consultas desnecessárias ao SGDB .
/// RECOMENDO o uso em todos os Grids com consultas, telas de login,
/// nas entrada de dados ou antes de enviar os dados para alguma SP (Stored procedure)
/// Powered by @boscobecker - 2019
const
PalavrasArray : Array[0..40]of string =(
'','--','-','*','/','.',
' ','"','/*','*/','!','?',
'+',',','{', '}', '=', '1=1',
'select', 'from','where',
'all','in', 'and','or' ,
'not','group by','exists',
'with', 'order by','by',
'union','alter','table',
'begin','exec','grant',
'create','drop','insert',
'truncate');
begin
///Default
Result := False;
/// Caso tenha informado apenas 2 caracteres
/// para não fazer SQL pesado usando apenas
/// 2 caracteres, just it
if (Length(text) <= 2 ) then
Begin
Result := False;
Exit;
end;
/// verificando conteúdo dos dados
for i:= 0 to High(PalavrasArray) do
if Pos(AnsiUpperCase(PalavrasArray[i]),AnsiUpperCase(campo)) > 0 then
Result := True;
/// Aspas simples adicional de '
if (pos(chr(39), campo) > 0) then
Result := True;
end;
@BoscoBecker
Copy link
Author

BoscoBecker commented May 6, 2019

Exemplo de como usar o método no seu código / Example of how to use the method in your code

EditConsulta.text := ' and 1=1 -- ';

if EscapeSQLInjection(EditConsulta.text) then
  showmessage('Contém código malicioso / Malicious code')
else
  showmessage('Não Contém código malicioso / Malicious code');

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment