java - servletoutputstream.write 的 xss 漏洞

标签 java xss

    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>")

输出:

&lt;script&gt; alter(''hi)&lt;/script&gt

您也可以使用 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/

相关文章:

java - 正则表达式插入符号和符号有效,但不知道为什么

javascript - 使用javascript重定向到当前域之外

java - 将 Jruby HashMap 转换为 Java HashMap

java - 您如何处理和解析 JPA 持久性异常以向用户提供有意义的消息

java - 在桌面应用程序中延迟加载 JPA 实体

java - 如何暂停@test的执行直到@BeforeSuit执行?

java - 寻求建议: overview/detail representation of models

security - Playframework 中的跨站脚本和 Web 参数篡改预防

java - 创建白名单以防范基于 Java 的应用程序中的 XSS 漏洞

php - 在 PHP 中的 html 属性中转义 URL