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);
}
我有这段代码。代码审计工具说 servletoutputstream.write(b, 0, b.length); xss易受攻击。但我不知道它是如何报告相同的。以及如何修复它。我正在使用 ESAPI 来验证输入并转义其他 xss 漏洞报告问题中的输出。我也需要对这些做同样的事情吗?请给出建议或解决方案。 在做了一些研究工作后,我发现字节 b[] 需要使用 ESAPI 为 htmlESCAPE 或 xmlESCAPE 转义。它能解决问题吗?
最佳答案
如果getUploaded()
返回一些由黑客上传的 javascript 代码 <script>alert('hi')</script>
那么这可能会产生问题。
您可以尝试以下解决方案来格式化 Spring
附带的字符串框架。
HtmlUtils.htmlEscape("<script> alter(''hi)</script>")
输出:
<script> alter(''hi)</script>
您也可以使用 JSTL 库来格式化包含 javascript
的字符串.
public static byte[] getFormatedString(byte[] string){
String str=new String(string);
str=HtmlUtils.htmlEscape(str);
return str.getBytes();
}
您的代码:
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(getFormatedString(b), 0, b.length);
关于java - servletoutputstream.write 的 xss 漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11096072/