正则表达式阻止sql/script注入

Rus*_*ott 3 regex sql-injection javascript-injection

我试图创建客户端验证一个正则表达式的表达式(之前的服务器端验证这也将发生),以防止SQL /脚本注入即是这样的-这工作

(script)|(<)|(>)|(%3c)|(%3e)|(SELECT) |(UPDATE) |(INSERT) |(DELETE)|(GRANT) |(REVOKE)|(UNION)|(<)|(>)
Run Code Online (Sandbox Code Playgroud)

这个(上面)表达式的正确格式是什么,所以我可以使它工作?

例如,我的电子邮件检查程序是这样的

(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/))
Run Code Online (Sandbox Code Playgroud)

哦,如果你能想到任何其他东西,请"喊".

sil*_*nky 7

您甚至不能以任何方式阻止客户端的 SQL 注入尝试。这是一个非常非常糟糕的想法,它不能帮助你,但可能会给真正的用户带来麻烦。它不会阻止任何有机会实际利用 SQLi 的人。

就正则表达式而言,您需要在开头和结尾添加 / ,就像在邮件示例中一样,以表示它是正则表达式。另外,我认为正则表达式设计是有缺陷的,因为它仍然允许许多注入向量。例如,它允许可怕的单引号 ', -- 注释等。它甚至没有开始涵盖 RDBMS 中可能出现的所有内置功能。攻击者经常会利用服务器端已有的 SELECT 语句,因此删除它们可能也无济于事。

最好的防御是在服务器端使用参数化查询(例如 pg_prepare 用于 php 和 postgres)


Ner*_* Jr 5

通常,Sql Injection发生在传递给sql命令参数的字符串中,例如insert,update,delete或select.此正则表达式验证sql命令中是否存在任何内联或块注释.

/[\t\r\n]|(--[^\r\n]*)|(\/\*[\w\W]*?(?=\*)\*\/)/gi
Run Code Online (Sandbox Code Playgroud)