公共类CrossSiteScriptingXSSRequestWrapper扩展了HttpServletRequestWrapper {
public CrossSiteScriptingXSSRequestWrapper(HttpServletRequest servletRequest) throws IOException {
super(servletRequest);
}
@Override
public String[] getParameterValues(String parameter) {
String[] values = super.getParameterValues(parameter);
if (values == null) {
return null;
}
Stream<String> stream = Arrays.stream(values);
if (values.length > 35) {
stream = stream.parallel();
}
stream.forEach(value -> {
XSSRemover.skipXSS(value);
});
return values;
}
@Override
public String getParameter(String parameter) {
return XSSRemover.skipXSS(super.getParameter(parameter));
}
@Override
public String getHeader(String name) {
return XSSRemover.skipXSS(super.getHeader(name));
}}
我想询问是否需要,或者可以用以下代码替换它:
<security:headers>
<security:frame-options policy="SAMEORIGIN"/>
<security:xss-protection enabled="true"/>
<security:cache-control/>
</security:headers>
然后浏览器会处理它而不是过滤器?谢谢你的回答:)
答案 0 :(得分:0)
如果您查看XSS Cheat Sheet,您很快就会发现将已知内容列入黑名单将无法保护网络应用程序。正确的输入处理是。话虽如此,你仍然坚持使用你坚持使用的应用程序。并且很难说将会发生什么。我会写一些测试用例,看看他们是否给你了你期望的结果(使用备忘单来收集关于模拟内容的想法)。
话虽如此,将保护负担放在浏览器上只是一个额外的元素,您的服务器应该正确处理(转义)其内容。注意:还有一种被称为“存储XSS”的攻击 - 我的长期(可能从未执行过)计划是写一本标题为<script>alert("xss explained");</script>
的书 - 只是为了测试各种商店的实施。它是perfectly valid title,虽然浏览器的xss-protection可能无法执行,但它也不会显示正确的书名。
此外,您的应用程序选择的方法仅保护您免受来自浏览器的内容。通过另一个前端(API,集成,导入程序)进入的任何东西都可能完全利用系统。如果这是一个问题留给你。