如何在SQL数据库中查询恶意或可疑数据?

时间:2011-04-25 19:20:49

标签: sql regex security xss

最近我一直在对PHP应用程序进行安全传递,我已经找到并修复了一个XSS漏洞(在验证输入和编码输出时都有)。

如何查询数据库以确保没有任何恶意数据存在于其中?有问题的字段应该是带有允许符号( - ,#,空格)的文本,但不应该有任何特殊的html字符(<,“,',>等)。

我假设我应该在查询中使用正则表达式;有没有人有预建的正则表达式,特别是为此目的?

2 个答案:

答案 0 :(得分:2)

如果您只关心非字母数字及其SQL Server,您可以使用:

SELECT *
FROM MyTable
WHERE MyField LIKE '%[^a-z0-9]%'

这将显示MyField除a-z和0-9之外的任何行。

编辑:

更新后的模式为:LIKE '%[^a-z0-9!-# ]%' ESCAPE '!'

我必须添加ESCAPE字符,因为您要允许短划线-

答案 1 :(得分:1)

出于同样的原因,你不应该对黑名单(即非法字符列表)进行输入验证,我会尽量避免在你的搜索中做同样的事情。我正在评论而不知道持有数据的字段的意图(即姓名,地址,“关于我”等),但我的建议是构建您的查询以确定您 做什么< / em> 希望在您的数据库中找出异常。

原因是XSS中只使用了很多不同的字符模式。看看XSS Cheat Sheet,你就会开始有个主意。特别是当你进入角色编码时,只是寻找尖括号和引号之类的东西不会让你太过分。