as expressões regex impedem a injecção de SQL/script

estou a tentar criar uma expressão regex para a validação do lado do cliente (antes da validação do lado do servidor que também terá lugar) para impedir a injecção de SQL / script isto é algo como isto-que não funciona

(script)|(<)|(>)|(%3c)|(%3e)|(SELECT) |(UPDATE) |(INSERT) |(DELETE)|(GRANT) |(REVOKE)|(UNION)|(<)|(>)

Qual é o formato correcto para esta expressão (acima) para que possa pô-la a funcionar?

Por exemplo, o meu verificador de E-Mail é assim.
(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/))
E se se lembrar de mais alguma coisa para acrescentar, por favor, "grite".

Author: Bart Kiers, 2011-09-15

5 answers

Geralmente a injecção de Sql ocorre nas cadeias de caracteres passadas para os parâmetros de um comando sql, tais como inserir, actualizar, apagar ou seleccionar. Esta expressão regular valida se existe algum comentário em linha ou em bloco no comando sql.

/[\t\r\n]|(--[^\r\n]*)|(\/\*[\w\W]*?(?=\*)\*\/)/gi
 5
Author: Nery Jr, 2017-07-10 22:03:45

Você não pode de forma alguma impedir as tentativas de injecção de SQL do lado do cliente. É uma idéia terrível, terrível que não pode ajudá-lo, mas pode causar uma dor de bola para usuários genuínos. Não impedirá ninguém que tenha a possibilidade de explorar um SQLi.

No que diz respeito à expressão regular, você precisa adicionar o / no início e no fim, como no seu exemplo de correio, para denotar que é um regex. Além disso, acho que o desenho regex é defeituoso, pois ainda permite muitos vectores de injecção. Para exemplo que permite a temida única citação ', -- comments e outros. Ele nem sequer começa a cobrir todas as funções de construção de seus RDBMS que podem estar por aí. Um atacante muitas vezes fará uso de, por exemplo, selecionar declarações já no seu lado do servidor, então removê-las provavelmente não iria ajudar nenhum dos dois.

A sua melhor defesa é usar consultas parametrizadas do lado do servidor (pg_prepare para php & postgres)

 3
Author: sillyMunky, 2011-09-15 09:54:22
Injecção de SQL e fuga parecem mágicos para muitas pessoas, algo como escudo contra algum perigo misterioso, mas: não tenha medo disso - {[[2]}não é nada mágico. É apenas a maneira de permitir caracteres especiais sendo processados pela consulta.

Por isso, não inventes novos escudos mágicos e formas de proteger o perigo de injecção mágica! em vez disso, tente entender como a fuga da entrada funciona.

 1
Author: TMS, 2017-05-23 12:25:52

Apenas a-z ou a-Z ou 0-9 entre 4-8 caracteres:

^([a-z]|[A-Z]|[0-9]){4,8}$
 1
Author: HQtunes.com, 2018-07-12 11:21:15

É mais comum escapar dos caracteres de controlo como `e ' dessa forma ainda se pode introduzir o código SQL na base de dados, dizer que está num CMS e estou a adicionar um artigo sobre a injecção de SQL. Quero usar essas palavras e caracteres sem desencadear uma injecção. Olhando para ele, parece ser para algo com base HTML para converter o para , que irá sanitar qualquer e todas as tags html, enquanto ainda permite que o conteúdo de demonstração HTML para ser exibido.

Como já disse, isto ... todos devem estar do lado do servidor, como ele entra no sistema.
 0
Author: ewanm89, 2011-09-15 09:56:58