最近我一直在对PHP应用程序进行安全传递,我已经找到并修复了一个XSS漏洞(在验证输入和编码输出时都有)。
如何查询数据库以确保没有任何恶意数据存在于其中?有问题的字段应该是带有允许符号( - ,#,空格)的文本,但不应该有任何特殊的html字符(<,“,',>等)。
我假设我应该在查询中使用正则表达式;有没有人有预建的正则表达式,特别是为此目的?
答案 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,你就会开始有个主意。特别是当你进入角色编码时,只是寻找尖括号和引号之类的东西不会让你太过分。