• XML External Entity Injection(xml外链实体注入)


    XML External Entity Injection(xml外链实体注入)

    xml 外联实体

    参考博客:http://blog.csdn.net/cristianojason/article/details/51000438

    例如:

    源文件

    <?xml version="1.0" encoding="GBK"?>
    
    <!DOCTYPE root[
    
    <!ENTITY titlue "我是title1">
    
    <!ENTITY titlue2 "我是title2">
    
    ]>
    
    <root1>
    
    <title value="&titlue;"> &titlue; </title>
    
    <title2>
    
    <value><a>&titlue2;</a></value>
    
    </title2>
    
    </root1>

    解析后的结果:

    <?xml version="1.0" encoding="utf-8"?>
    
    <!DOCTYPE root>
    
    <root1>
    
    <title value="我是title1">我是title1</title>
    
    <title2>
    
    <value>
    
    <a>我是title2</a>
    
    </value>
    
    </title2>
    
    </root1>

    危害:如果外链的是一个网页, 或者其他程序,又或者外联一下攻击性的东西, 导致的后果可想而知。

    解决方案:

    禁止外链实体:

    public static XmlDocument GetXmlDocumentIgnoreDtd(string xmlContent)
            {
                var xmlDoc = new XmlDocument
                {
                    XmlResolver = null
                };
                var settings = new XmlReaderSettings()
                {
                    DtdProcessing = DtdProcessing.Prohibit,
                    XmlResolver = null
                };
                
                // 禁止外联实体,防止注入
                byte[] array = Encoding.UTF8.GetBytes(xmlContent);
                using (var stream = new MemoryStream(array))
                {
                    var reader = XmlReader.Create(stream, settings);
                    xmlDoc.Load(reader);
                }
                return xmlDoc;
            }

     注:如果导入的xml中存在外联实体,则会抛出异常,因为该方法不允许外链实体,如果想导入外联实体则需要修改DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null

  • 相关阅读:
    从0开始学Swift笔记整理(二)
    从0开始学Swift笔记整理(一)
    JAVA反射机制
    Spring基础知识汇总
    关于类和对象的进一步讨论 C++
    C++ 共用体 枚举类型 所有
    自定义数据类型 C++ 结构体类型 共同体类型 枚举类型 类类型{}
    C++ 指针 引用 变量引用
    函数和指针 C++
    C++字符串与指针 所有的内容也就这么多了。
  • 原文地址:https://www.cnblogs.com/duanbiflying/p/7661732.html
Copyright © 2020-2023  润新知