zoukankan      html  css  js  c++  java
  • 微信支付回调,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包的,我也不知道了,囧...

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

  • 相关阅读:
    终于在园子里安家了
    Ajax简单应用,检测用户名是否存在 (转)
    ASP.NET 2.0防止同一用户同时登陆方法一(转)
    .NET:七道asp.net页面传值题(转)
    蛙蛙推荐:SQLServer优化资料整理(转)
    我说看起来怎么这么眼熟
    ASP.NET 2.0防止同一用户同时登陆方法二(转)
    Javascirpt Function 不能命名为reset
    关于Jquery ajax调用一般处理程序Handler报500 错误(Internal Server Error)解决办法
    智能匹配
  • 原文地址:https://www.cnblogs.com/Little-Wang/p/9273283.html
Copyright © 2011-2022 走看看