我正在努力修复java中的跨站点脚本问题。由于我是OWASP的新手,有人可以帮助我弄清楚如何在下面的案例中使用OWASP来清理输入。
Enumeration<String> EnumHeader = request.getHeaderNames();
Map<String, String[]> pMap = request.getParameterMap();
Object value = request.getHeader(key);
String[] refs = (req.getParameterValues(REFS_NAME));
答案 0 :(得分:1)
虽然数据验证在预防XSS方面非常有用,但它并不一定涵盖持久XSS的所有基础。唯一100%有效的保护是OWASP Java编码器项目或OWASP ESAPI编码器提供的正确的上下文输出编码。其中一个原因是对于持久性XSS,受污染的数据可能来自可能由另一个对这些相同数据库表具有插入/更新访问权但未进行正确数据验证的应用程序输入或更改的数据库。 (也就是说,受污染的数据可能会以某种其他方式进入您的系统,而不是通过您的应用程序。)因此,唯一的万无一失的解决方案是进行适当的上下文输出编码。您已经指出的OWASP XSS预防备忘单是一个很好的起点,可以解释所有这些。
答案 1 :(得分:0)
您可以使用OS库来清理这些字符串/对象。
示例库:https://finn-no.github.io/xss-html-filter/
然后,对于那些标题和参数集合,您可以使用Java 8 Streams迭代它们,并将它们映射到新的过滤集合(使用清理程序库)。
答案 2 :(得分:0)
可以通过对参数进行编码以及使用自定义正则表达式验证参数来修复跨站点脚本。
例如:Encode.forhtml(inputparam)
使用 OWASP 编码器的基于上下文的编码有多种类型。如果您不确定编码器或验证模式,请尝试以下跨站点脚本验证器以确保工作(正确)修复方法。
Java 的 XSS 验证器:http://fixforscrossite.us-east-2.elasticbeanstalk.com/