如何在JSP/Servlet Web应用程序中防止XSS攻击?
杰夫实际上在Sanitize HTML中发布了这个.但他的例子是在C#中,我实际上对Java版本更感兴趣.有没有人有更好的Java版本?他的例子是否足以直接从C#转换为Java?
[更新]我已经对这个问题表示了赏心悦目,因为当我问这个问题时,SO并不那么受欢迎(*).至于与安全相关的任何事情,人们对它的看法越多,它就越好!
(*)事实上,我认为它仍处于封闭测试阶段
我们使用jspx作为模板引擎.我们有数十个具有数百个el表达式的屏幕,例如$ {user.firstName}或"$ {mail.subject}"
默认情况下,所有这些HTML代码都不会被转义.如果在字段中存在<或"的东西 - 屏幕将失败.我们总是可以使用fn:escapeXml,但在所有地方这样做真的很无聊.
1)默认情况下是否有办法逃脱?
我知道的唯一方法是破解JSP编译器(如tomcat的jasper).但这不是一条路.
2)为什么某人可能需要在el中使用未转义的HTML?在模板外部存储HTML(例如在数据库中)不是一个好习惯.
3)我确信模板引擎应该自动处理它(就像在XSLT中一样),用户为什么要关心它?手动转义(fn:escapeXml)闻起来像SQL手动转义(用于代替JDBC setParam):样板代码和sql注入的好地方(在我们的例子中是跨站点脚本).
String id = request.getParameter("id") != null ? request.getParameter("id") : "0";
aaaa doc = bbb.getdetailsById(id);
byte b[] = doc.getUploaded();
try {
response.setContentType("APPLICATION/OCTET-STREAM");
String disHeader = "Attachment;Filename=" + doc.getName();
response.setHeader("Content-Disposition", disHeader);
servletoutputstream = response.getOutputStream();
servletoutputstream.write(b, 0, b.length);
}
Run Code Online (Sandbox Code Playgroud)
我有这段代码。代码审计工具显示 servletoutputstream.write(b, 0, b.length); xss 容易受到攻击吗?但我不知道它是如何报告同样的情况的。以及如何修复它。我正在使用 ESAPI 来验证输入并转义其他 xss 漏洞报告问题中的输出。我也需要对这些做同样的事情吗?请给出建议或解决方案。经过一些研究工作后,我发现字节 b[] 需要使用 ESAPI 对 htmlESCAPE 或 xmlESCAPE 进行转义。它会解决问题吗?