【问题标题】:Checkmarx scan issue - deserilization of unsanitized xml data from the inputCheckmarx 扫描问题 - 从输入中反序列化未净化的 xml 数据
【发布时间】:2022-12-13 06:30:04
【问题描述】:

我目前正面临问题校验码扫描.它强调我们是反序列化未经处理的数据在下面提到的最后一行。如何纠正这个问题?

注意:我们没有任何 xsd

String message = request.getParameter("param_name"); // Input xml string
XStream parser = new XStream(new StaxDriver());
MyMessage messageObj = (MyMessage) parser.fromXML(message); // This line is flagged by CHECKMARX SCAN 

【问题讨论】:

    标签: java xml checkmarx


    【解决方案1】:

    我会假设你打算说你得到的结果是不可信数据的反序列化.

    您收到该消息的原因是 XStream 默认情况下会愉快地尝试创建几乎在 XML 中指定的任何对象的实例。该技术是只允许您打算反序列化的类型。人们会假设您已经确保这些类型是安全的。

    我运行了从您的示例派生的这段代码,并验证了我添加的两行是否被检测为清理。

    String message = request.getParameter("param_name");
    XStream parser = new XStream(new StaxDriver());
    parser.addPermission(NoTypePermission.NONE);
    parser.allowTypes(new Class[] {MyMessage.class, String.class});
    MyMessage messageObj = (MyMessage) parser.fromXML(message);
    
    

    我添加了 String.class 类型,因为我假设您在 MyMessage 上的某些属性是 StringString 本身,与大多数原语一样,对于反序列化通常是安全的。虽然字符串本身是安全的,但您需要确保使用它的方式是安全的。 (例如,如果您正在反序列化一个字符串并将其作为 shell exec 的一部分传递给操作系统,那可能是一个不同的漏洞。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-27
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      相关资源
      最近更新 更多