【问题标题】:Prevent exposure of sensitive data against PCI standards - response.getWriter().write(xml.toString())防止暴露敏感数据违反 PCI 标准 - response.getWriter().write(xml.toString())
【发布时间】:2012-06-18 04:40:09
【问题描述】:

我正在根据代码审计报告修复代码。它针对语法为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());

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

【问题讨论】:

  • 我认为问题不在于 StringBuffer,而在于您所公开的信息。 “desc”中是否有任何敏感信息,例如信用卡号或 CVV 代码?
  • no desc 没有任何敏感数据。它仅由审核工具报告,我只需要针对该问题提供修复。
  • 你为什么不直接问审计员他们的意思?
  • 亲爱的,我正在做一个客户项目。客户已经完成了代码审计,并向我们提供了针对不同审计标准的问题和消息的报告,我需要修复它们,这就是我能说的。如果您知道解决方案,请告诉。谢谢

标签: java stringbuffer


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-06-21
      • 2015-05-21
      • 2017-07-10
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 2016-04-12
      • 2011-06-21
      • 2019-03-21
      相关资源
      最近更新 更多