使用 OWASP 修复 Java 中的跨站点脚本漏洞



我正在努力修复Java中的跨站点脚本问题。由于我是OWASP的新手,有人可以帮我弄清楚如何在以下情况下使用OWASP来清理输入。

  1. Enumeration<String> EnumHeader = request.getHeaderNames();

  2. Map<String, String[]> pMap = request.getParameterMap();

  3. Object value = request.getHeader(key);

  4. String[] refs = (req.getParameterValues(REFS_NAME));

虽然数据验证在防止 XSS 方面非常有帮助,但它不一定涵盖持久 XSS 的所有基础。唯一100%有效的保护是由OWASP Java编码器项目或OWASP ESAPI的编码器提供的正确上下文输出编码。其中一个原因是对于持久性 XSS,受污染的数据可能来自可能由另一个应用程序输入或更改的数据库,该应用程序对这些相同的数据库表具有插入/更新访问权限,但没有进行正确的数据验证。(也就是说,受污染的数据可能以某种其他方式进入系统,而不是通过应用程序。因此,唯一万无一失的解决方案是进行适当的上下文输出编码。您已经指出的OWASP XSS预防备忘单是一个很好的起点,可以解释所有这些。

您可以使用操作系统库来清理这些字符串/对象。

示例库:https://finn-no.github.io/xss-html-filter/

然后,对于这些标头和参数集合,您可以使用 Java 8 Streams 遍历它们,并将它们映射到新的过滤集合(使用清理器库(。

可以通过对参数进行编码以及使用自定义正则表达式验证参数来修复跨站点脚本。

例如:Encode.forhtml(inputparam(

有使用 OWASP 编码器的基于上下文的编码的服务器类型。 如果您不确定编码器或验证模式,请尝试以下跨站点脚本验证器,以确保工作(正确(修复方法。

XSS 验证器 for java: http://fixforscrossite.us-east-2.elasticbeanstalk.com/

最新更新