【发布时间】:2011-11-17 17:47:58
【问题描述】:
我正在尝试为客户端验证创建一个正则表达式(在服务器端验证之前),以防止 sql/脚本注入,即类似这样的东西 - 不工作
(script)|(<)|(>)|(%3c)|(%3e)|(SELECT) |(UPDATE) |(INSERT) |(DELETE)|(GRANT) |(REVOKE)|(UNION)|(&lt;)|(&gt;)
这个(上面的)表达式的正确格式是什么,以便我可以让它工作?
例如我的电子邮件检查器是这样的
(/^[^\\W][a-zA-Z0-9\\_\\-\\.]+([a-zA-Z0-9\\_\\-\\.]+)*\\@[a-zA-Z0-9_]+(\\.[a-zA-Z0-9_]+)*\\.[a-zA-Z]{2,4}$/))
哦,如果您能想到其他要添加的内容,请“喊”。
【问题讨论】:
-
不要尝试验证输入,只需确保转义字符串中的特殊字符。
-
为什么,为什么?在您的服务器端代码中使用适当的转义工具来转义 SQL 参数,以及您将要插入 HTML 或其他地方的文本。防止任何注射可能性并消除任何“注射预防检查”的需要。
-
它允许用户添加包含 SQL 文本的文章等。考虑一下,您可能会在以后重用此代码。
-
@brain 如果他使用准备好的语句,他甚至不需要转义任何东西。如果您正在执行接受用户提供的参数的查询(或任何重复多次的查询),它们在各方面都会更好。但是,如果该文本随后从数据库中读回,则在读取该文本时,他将不得不进行一些转义以防止存储的 XSS 攻击。
-
@sillyMunky:您说得对,如果您使用准备好的语句,则无需转义。我的评论是如果您想在不使用准备好的语句的情况下进行查询。
标签: regex sql-injection javascript-injection