使用正则表达式防止 SQL 注入
我知道以这种方式(正则表达式)防御 SQL 注入是非常错误的,我必须使用参数化查询,但这次我有一个特殊的情况。我正在编写一个表单生成器程序,我必须编写一个复杂的搜索用户控件,所以这次我没有其他方法(我认为)!
无论如何,我正在寻找一个正则表达式来检查输入字符串(服务器端)是否存在任何攻击(例如查询)。
I know it is so wrong to defend SQL Injection this way (regular expression) and i must use parametrized queries but this time i have an special situation. I'm writing a form generator program and i have to write a complicated search user control so this time there is no other way for me (I think)!
Any way i am looking for a regular expression to check input strings (server side) whether there is any attack like queries on it or not.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我还想说使用参数化存储过程以正确的方式执行此操作。基本思想是将所有参数设置为空,然后只传递您想要搜索的参数。您的 WHERE 子句看起来像这样
这里有一些更多详细信息
http:// /weblogs.asp.net/rmclaws/archive/2004/02/18/75381.aspx
I would also say to do this the correct way using a parameterised stored procedure. The basic idea is you set all the parameters to null and then only pass the ones you want to search on. Your WHERE clause then looks like this
Here are some more details
http://weblogs.asp.net/rmclaws/archive/2004/02/18/75381.aspx
这是非常困难的,因为正则表达式可以使用两种方法:
两者都很难。我的猜测是,#1 更安全,因为您拒绝除有效 SQL 之外的所有 SQL,但在不过多限制可能性的情况下,很难防止有效 SQL 中的无效 SQL。
最后你会发现使用参数更安全,因为只要你不执行传递的字符串,就不会有 SQL 注入的危险。
This is very hard because the regular expression can use two approaches:
Both are hard. My guess is that #1 is safer because you reject all except valid SQL but it will be quite hard to prevent invalid SQL in the valid SQL without restricting the the possibilities too much.
In the end you'll find that using parameters is much safer because as long as you do not execute the passed strings there is no danger of SQL injection.