防止SQL注入攻击的方法&;javaweb应用中的XSS
我正在编写一个java类,它将由servlet过滤器调用,并检查基于Struts的java web应用程序的注入攻击尝试和XSS。InjectionAttackChecker类使用regex&java.util.regex.Pattern类根据regex中指定的模式验证输入 话虽如此,我有以下问题:防止SQL注入攻击的方法&;javaweb应用中的XSS,java,regex,xss,sql-injection,Java,Regex,Xss,Sql Injection,我正在编写一个java类,它将由servlet过滤器调用,并检查基于Struts的java web应用程序的注入攻击尝试和XSS。InjectionAttackChecker类使用regex&java.util.regex.Pattern类根据regex中指定的模式验证输入 话虽如此,我有以下问题: 所有特殊字符和字符模式(例如,,-,=)都应该被阻止以防止注入攻击 是否有任何现有的正则表达式模式可以按原样使用 在某些特定情况下,我必须允许一些特殊字符模式,一些示例值(允许)是(使用“管道”|字
我希望我已经清楚地提到了这个问题。但如果我没有提到,我很抱歉,因为这只是我的第二个问题。如果需要任何澄清,请告诉我。基于您的问题,我假设您正在尝试筛选不好的值。我个人认为此方法可能会很快变得非常复杂,并建议对值进行编码这是一篇关于这个主题的IBM文章,列出了这两种方法的优缺点 为了避免SQL注入攻击,只需使用准备好的语句,而不是创建SQL字符串。这里有一个非常广泛的主题
不过,我不认为你会有一个圣杯。我还建议你尝试以一些标准方式(uuencode,base64)对接收到的文本进行编码/解码。验证和绑定所有数据是必须的。同时执行客户端和服务器端验证,因为10%的人在浏览器中关闭JavaScript
杰夫·阿特伍德(Jeff Atwood)对这个话题有着深刻的认识,它的复杂性让你尝到了滋味。如果你试图清理输入上的所有数据,你将经历一段非常困难的时期。有大量涉及字符编码的技巧,这些技巧将允许人们绕过你的过滤器。这只是需要解决的无数问题中的一部分可以作为SQL注入来完成。您还必须防止HTML注入、JS注入和其他潜在的注入。唯一可靠的方法是对应用程序中使用的数据进行编码。对您写入网站的所有输出进行编码,对所有SQL参数进行编码。与正常编码一样,对后者要特别小心如该链接中所述,g不适用于非字符串SQL参数。使用参数化查询是完全安全的。还请注意,从理论上讲,您可以在用户输入数据时对数据进行编码,并将其编码存储在数据库中,但只有当您始终以使用该类型encod的方式使用数据时,这才有效ing(即HTML编码,如果它只用于HTML;如果它用于SQL,则不会受到保护)。这就是为什么经验法则是永远不要在数据库中存储编码数据,并且总是在使用时进行编码的部分原因。看看。我认为这正是您想要的;您可以设置筛选器来阻止某些标记。它们还提供策略模板,slashdot策略将是一个良好的开端,然后添加您需要的标记。 此外,www.osasp.org网站上有大量关于保护您的应用程序的知识。
用户“nemo”关于使用准备好的语句和编码的说明也应该执行。不要过滤或阻止值
谢谢nemo。但我的应用程序是一个旧的应用程序,要将所有语句转换为PreparedStatements需要花费大量的努力,这就是我们选择使用其他方法的原因。非常感谢您提供有关这方面的任何进一步信息。实际上,我有很多经验更新旧的应用程序以使用PreparedStatements,这是相当不错的很简单,除非你使用了很多动态语句。但是这个过程很耗时,所以我理解你不想花时间。希望IBM的文章对你有帮助。祝你好运。@arya:PreparedStatements没有替代品。其他一切都是一个等待发生的bug。如果你现在没有时间更新所有内容,那么hing,我建议优先更新您正在编辑的每个文件中的每个SQL语句。在进行编码时,请清理代码。对于编码,我是否使用URLEncoder类?然后在哪里解码?