防止敏感数据暴露于PCI标准 - response.getWriter()。write(xml.toString())

时间:2012-06-18 04:40:09

标签: java stringbuffer

我正在修改代码审核报告的代码。它针对具有语法response.getWriter().write(xml.toString())的行说“预防敏感数据的暴露”。整个代码如下。

String alertId =  request.getParameter("alertId") != null ? request.getParameter("alertId") : "";
                    String desc=AAAA.getBBBB(Long.parseLong(AAAA.getCCCC(alertId)));
                    StringBuffer xml = new StringBuffer();

                    xml.append("<?xml version=\"1.0\"?>");
                    xml.append("<parent>");
                    xml.append("<child>");
                    xml.append("<alertDesc>");
                    xml.append(desc);
                    xml.append("</alertDesc>");
                    xml.append("</child>");
                    xml.append("</parent>");

                    response.getWriter().write(xml.toString());  // ISSUE IN THIS LINE
                    response.setContentType("text/xml");
                    response.setHeader("Cache-Control", "no-cache");

我做了足够的家庭工作,可以修复XSS攻击并使用ESAPI。但不知道如何解决这个问题。请给出建议 该报告针对报告的问题发出以下信息。 “通过网页”

泄漏toString()结果(“xml”) 经过一天的研究后,我发现sax解析器在这种情况下可以帮助我。它实际上是StringBuffer.toString()语法中的内存泄漏,因为敏感数据被暴露和丢失。但我不知道如何实现这一点。在某些地方我发现使用StringBuilder()类而不是StringBuffer()类。任何人都可以帮助我或提出宝贵的建议。 提前谢谢。

此外,我对其他类型的代码也有同样的问题。它在下面。

StringBuffer content = (StringBuffer)file.get("content");
response.setContentLength((int)content.length());
            response.getWriter().write(content.toString());

我再也不知道如何解决这个问题。问题是该工具报告的敏感数据泄漏情况相同。

2 个答案:

答案 0 :(得分:0)

正如我在评论中所说,我不认为评论与代码本身有关,而是与敏感数据的曝光有关。我已经阅读了PCI-DSS文档,我不记得它说明了应该如何编码(无论是好的做法)。您可以自己查看所有可用的PCI documentation。这是一项艰巨的任务,更好的方法是尝试找出顾问的意思。

当你不知道问题出在哪里时,很难解决问题。

答案 1 :(得分:0)

需要正确验证content.toString()。使用ESAPI严格验证它。直接写入响应是非常容易受到攻击的,如果数据是从具有请求作为输入的方法输出的话,那么它的两次易受攻击。重大安全问题。