• 微信支付回调,XXE攻击漏洞防止方法


    最近微信支付回调发现的XXE攻击漏洞(什么是XXE攻击,度娘、bing去搜,一搜一大把),收到通知后即检查代码,

    微信给的解决方法是如果你使用的是:

    XmlDocument:

    XmlDocument xd = new XmlDocument
    {
         XmlResolver = null,
    };

    我们做微信支付没有使用他们的SDK,底层解析XML没有使用XmlDocument,用的是序列化XmlSerializer.Deserialize

    XmlSerializer:

    1)、如果你使用的是Stream、TextReader通过源码可以得知,已禁用XmlResolver

    /// <include file='docXmlSerializer.uex' path='docs/doc[@for="XmlSerializer.Deserialize"]/*' />
    /// <devdoc>
    ///    <para>[To be supplied.]</para>
    /// </devdoc>
    public object Deserialize(Stream stream) {
          XmlTextReader xmlReader = new XmlTextReader(stream);
          xmlReader.WhitespaceHandling = WhitespaceHandling.Significant;
          xmlReader.Normalization = true;
          xmlReader.XmlResolver = null;
          return Deserialize(xmlReader, null);
    }
            
    /// <include file='docXmlSerializer.uex' path='docs/doc[@for="XmlSerializer.Deserialize1"]/*' />
    /// <devdoc>
    ///    <para>[To be supplied.]</para>
    /// </devdoc>
    public object Deserialize(TextReader textReader) {
          XmlTextReader xmlReader = new XmlTextReader(textReader);
          xmlReader.WhitespaceHandling = WhitespaceHandling.Significant;
          xmlReader.Normalization = true;
          xmlReader.XmlResolver = null;
          return Deserialize(xmlReader, null);
    }

    2)、如果你使用的是XmlReader,那么需要Setting一下

    using (XmlReader xr = XmlReader.Create(s, new XmlReaderSettings()
    {
          XmlResolver = null,
    }))
    {
          XmlSerializer xs = new XmlSerializer(typeof(T));
          return xs.Deserialize(xr) as T;
    }

    这里可以防止实体注入,另外如果想要更加安全一点的去禁用一部分Uri外部引用,过滤安全的链接,那么

    根据上图可以重写XmlResolver

    3)、使用其他lib包的,我也不知道了,囧...

    更加简单的做法就是过滤关键字,如果包含则直接丢弃之

  • 相关阅读:
    winhex教程 转 武胜
    winhex 16.6 武胜
    深拷贝 武胜
    多线程更新UI 武胜
    symfony学习笔记
    c++ CTime COleTime的一些操作技巧
    php mysql apache 配置笔记
    查看Apache并发请求数及其TCP连接状态(转)
    MFC 添加lib引用笔记
    点分主机名
  • 原文地址:https://www.cnblogs.com/Little-Wang/p/9273283.html
Copyright © 2020-2023  润新知