我希望在我的应用程序中明确这些标题:
response.setHeader("Content-Security-Policy", "frame-ancestors 'self'");
response.setHeader("X-Content-Type-Options", "nosniff");
response.setHeader("X-XSS-Protection", "1; mode=block");
response.setHeader("Strict-Transport-Security", "max-age=7776000; cludeSubdomains");
String contextPath = ((HttpServletRequest) request).getContextPath();
response.setHeader("SET-COOKIE", "JSESSIONID=" +
((HttpServletRequest)request).getSession().getId() +
";Path="+contextPath+";Secure;HttpOnly");
response.setHeader("Cache-control", "no-cache, no-store,max-age=0, must-revalidate");
response.setHeader("Pragma", "no-cache");
response.setHeader("X-Frame-Options", "SAMEORIGIN");
截至目前,我知道:
frame
,iframe
或object
中呈现网页。现在我在CrossSiteScriptingFilter中有这个代码,它在web.xml
映射,进行XSS过滤。但结果是它更改了.png
文件编码并删除了损坏PNG文件编码的?
个字符,从而提供了错误的PNG数据。
请检查屏幕截图,它没有?
个字符,并被空字符串替换,因此它不允许.png
个文件呈现。
我分析了代码,发现删除响应标头X-Content-Type-Options
正在完成工作(.png
文件正在正确呈现。)
我仍然不确定为什么会出现此问题以及为什么X-Content-Type-Options
将?
字符替换为创建问题的""
字符串。有人可以解释一下。
提前致谢:)
答案 0 :(得分:1)
听起来我觉得你非常接近你的答案:特殊字符的XSS过滤对于二进制文件来说是一个坏主意,它可能有效地使用在(x)html,js或类似文件中不合适的字符解释文件。
通常,Web应用程序会将此类资源拆分到自己的目录中,该目录将对其内容应用不同的进程,例如,不对其运行XSS保护过滤器。配置过滤器时,应排除已知专门包含二进制数据的路径,例如上述资源目录。
看起来可能是标题导致/禁止过滤器猜测MIME类型,将二进制文件误解为html或类似(可能基于PNG标题中的文本)或者仅仅依赖于过滤器默认,然后清理它。可能是你的MIME类型标题是错误的并且嗅探器正在修复它(因此告诉它不要这样做会阻止它恢复)。