使用OWASP修复java中的跨站点脚本漏洞
我正在用java解决跨站点脚本问题。由于我是OWASP新手,请有人帮助我了解如何在以下情况下使用OWASP清理输入使用OWASP修复java中的跨站点脚本漏洞,java,xss,esapi,Java,Xss,Esapi,我正在用java解决跨站点脚本问题。由于我是OWASP新手,请有人帮助我了解如何在以下情况下使用OWASP清理输入 Enumeration EnumHeader=request.getHeaderNames() Map pMap=request.getParameterMap() Object value=request.getHeader(键) String[]refs=(req.getParameterValues(refs_NAME)) 您可以使用OS库来清理这些字符串/对象 示例库: 然
Enumeration EnumHeader=request.getHeaderNames()代码>
Map pMap=request.getParameterMap()代码>
Object value=request.getHeader(键)代码>
String[]refs=(req.getParameterValues(refs_NAME))代码>
您可以使用OS库来清理这些字符串/对象 示例库:
然后,对于那些标题和参数的集合,您可以使用Java 8流对它们进行迭代,并将它们映射到新的过滤集合(使用sanitizer库)。虽然数据验证在防止XSS方面非常有用,但它不一定涵盖持久XSS的所有基础。唯一100%有效的保护是OWASP Java编码器项目或OWASP ESAPI编码器提供的正确上下文输出编码。其中一个原因是,对于持久性XSS,受污染的数据可能来自另一个应用程序输入或更改的数据库,该应用程序具有对这些数据库表的insert/update访问权限,但未进行正确的数据验证。(也就是说,受污染的数据可以通过应用程序以外的其他方式进入系统。)因此,唯一简单的解决方案是进行适当的上下文输出编码。您已经被指出的OWASP XSS预防备忘单是一个很好的起点,它解释了所有这一切。跨站点脚本可以通过编码参数和使用自定义正则表达式验证参数来修复 例如:Encode.forhtml(inputparam) 有几种使用OWASP编码器的基于上下文的编码类型。如果您不确定编码器或验证模式,请尝试下面的跨站点脚本验证程序,以确保(正确的)修复方法正常工作
XSS validator for java:该库使用正则表达式替换html中的字符串的方法可能会产生易受攻击的格式错误的html。owasp html消毒剂更好。例如,这会执行一个警报:
实际上,此处引用的HTML过滤器有一个特定的用例,即应用程序必须接受来自用户的HTML内容——默认情况下,它可能会使您更容易受到攻击,尤其是在您没有进行输出转义的情况下。正如@fgb还指出的,清理HTML的正确方法是使用HTML解析器,而不是regex。我将从以下规则0和规则1开始: