很抱歉这个长标题,不希望人们只是阅读标题,而不是问题然后去'复制xxx'当实际xxx是关于sprocs等...
所以我处在一种我可以使用的方式非常有限的情况。我仅限于使用经典ASP并仅使用直接查询进行查询 - 即没有存储过程或参数化查询。
我有什么选择?我正在考虑更换某些符号,如果可以的话,我认为在某些情况下某些符号需要通过。我知道我正在编写此脚本的应用程序,用'
替换所有''
;这应该足以绕过' or 1 = 1
黑客攻击,但我不知道还有哪些其他主要风险可以阻止。
我已经阅读了一下,但到处都是说参加参数化查询或sprocs,这显然不适合我。
鉴于我的限制,有人可以给我一些指示,说明如何使我的应用程序尽可能安全吗?提前谢谢。
答案 0 :(得分:3)
我不知道你不想在经典ASP中使用参数化查询的原因是什么,但你绝对可以。
这比在ASP.NET中使用它们有点棘手,但没有理由不能使用它们。
看一下这篇文章,答案中的链接很好地解释了如何继续。
Parameterized queries WITHOUT stored procedures?
如果你真的不想这种类型的查询,你总是可以像你说的那样替换'with'。我们已经使用一些遗留应用程序做了很长一段时间,并且SQL注入没有任何问题。
答案 1 :(得分:1)
您可以通过将更严格的算法放入输入验证来强制实施安全性:
例如,如果用户输入是数字,则可以验证是否只输入了字符0..9。
如果用户提供文本输入并且您希望允许使用特殊文本,请考虑限制可输入的文本以避免使用特殊字符。如果允许使用特殊字符,请确保您的ASP脚本检测并转义它们,以便将它们视为普通文本。
答案 2 :(得分:0)
您可以使用实现javax.servlet.Filter的类。此过滤器将拦截任何进入写入sql代码的servlet的请求。 然后使用在过滤器类的doFilter()中调用的ServletRequestWrapper,您可以对用户输入进行验证。 Servlet中获取用户输入的request.getparameter方法将被ServletRequestWrapper的getparameter覆盖。 在此方法中,您可以编码用户输入中存在的所有特殊字符。 这是防止SQL注入,XSS攻击最有效的方法