Rus*_*ott 3 regex sql-injection javascript-injection
我试图创建客户端验证一个正则表达式的表达式(之前的服务器端验证这也将发生),以防止SQL /脚本注入即是这样的-这不工作
(script)|(<)|(>)|(%3c)|(%3e)|(SELECT) |(UPDATE) |(INSERT) |(DELETE)|(GRANT) |(REVOKE)|(UNION)|(&lt;)|(&gt;)
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)
哦,如果你能想到任何其他东西,请"喊".
您甚至不能以任何方式阻止客户端的 SQL 注入尝试。这是一个非常非常糟糕的想法,它不能帮助你,但可能会给真正的用户带来麻烦。它不会阻止任何有机会实际利用 SQLi 的人。
就正则表达式而言,您需要在开头和结尾添加 / ,就像在邮件示例中一样,以表示它是正则表达式。另外,我认为正则表达式设计是有缺陷的,因为它仍然允许许多注入向量。例如,它允许可怕的单引号 ', -- 注释等。它甚至没有开始涵盖 RDBMS 中可能出现的所有内置功能。攻击者经常会利用服务器端已有的 SELECT 语句,因此删除它们可能也无济于事。
最好的防御是在服务器端使用参数化查询(例如 pg_prepare 用于 php 和 postgres)
通常,Sql Injection发生在传递给sql命令参数的字符串中,例如insert,update,delete或select.此正则表达式验证sql命令中是否存在任何内联或块注释.
/[\t\r\n]|(--[^\r\n]*)|(\/\*[\w\W]*?(?=\*)\*\/)/gi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22196 次 |
| 最近记录: |