1. XXE场景

关于XML解析存在的安全问题指引
微信支付商户,最近暴露的XML外部实体注入漏洞(XML External Entity Injection,简称 XXE),该安全问题是由XML组件默认没有禁用外部实体引用导致,非微信支付系统存在漏洞。
如果你在使用支付业务回调通知中,存在以下场景有使用XML解析的情况,请务必检查是否对进行了防范。 场景1:支付成功通知:notify_url参数值对应的URL;
场景2:退款成功通知:notify_url参数值对应的URL;
场景3:委托代扣签约、解约、扣款通知;
场景4:车主解约通知;
场景5:扫码支付模式一回调:在商户平台(pay.weixin.qq.com)-->产品中心-->开发配置-->支付配置-->扫码支付-->支付回调链接;
注:APP支付的用户端SDK不受影响,但APP支付成功回调通知里面要检查。 举例:需检查统一下单中传的notify_url参数值对应的URL,是否具有XXE漏洞
<xml>
   <appid> </appid>
   <attach>支付测试</attach>
   <body> </body>
   <mch_id></mch_id>
   <nonce_str> </nonce_str>
   <notify_url>http://wxpay.wxutil.com/pub_v2/pay/notify.v2.php</notify_url>
   <openid>oUpF8uMuAJO_M2pxb1Q9zNjWeS6o</openid>
   <out_trade_no></out_trade_no>
   <spbill_create_ip></spbill_create_ip>
   <total_fee></total_fee>
   <trade_type>JSAPI</trade_type>
   <sign> </sign>
</xml>
检查方法
如果漏洞被外界攻击,可能出现资金损失,所以请贵司重视,必须修复漏洞。
检测XXE漏洞方法:
使用贵司商户号登录商户平台(pay.weixin.qq.com),进入【产品中心】-->【安全医生】,开通后即可进行安全检测。 微信支付社区: https://developers.weixin.qq.com/community/pay
修复建议
.如果您的后台系统使用了官方SDK,请更新SDK到最新版本 SDK的链接:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1
.如果您是有系统提供商,请联系提供商进行核查和升级修复;
.如果您是自研系统,请联系技术部门按以下指引核查和修复;
.如果您的收款系统已不再使用,请将回调URL的服务删除;
.采用主动查单,不再使用回调。
因XXE属于高危漏洞,如不贵司一直未修复,将被停部分功能权限或停交易权限 温馨提醒:
如果贵司(或贵司的技术服务商)无法修复漏洞,可以换无漏洞的支付系统(比如使用微信买单收款或其他服务商收款系统)
请填写问卷告诉我们贵司的情况:填写问卷,提供技术负责人,我们将主动协助贵司修复。
如果以下方法不能解决您的问题,您可以在【微信开放社区】发帖,发帖标题请带上【XXE】(注意:发帖中不要出现私密参数,如密钥,回调链接等)。
如有疑问也可通过邮箱WePayTS@tencent.com与我们联系,感谢您对微信支付的支持。 Q&A
请见:XXE修复相关的Q&A 修复方法
XXE漏洞需要你在代码中进行相应的设置,不同语言设置的内容不同,下面提供了几种主流开发语言的设置指引:
【PHP】libxml_disable_entity_loader(true);【JAVA】
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException; // catching unsupported features
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
String FEATURE = null;
try {
// This is the PRIMARY defense. If DTDs (doctypes) are disallowed, almost all XML entity attacks are prevented
// Xerces 2 only - http://xerces.apache.or

2.原因:

主要是在xml转map的时候处理不得当造成的,所以接下来的修复工作主要在xml解析类中下功夫

3. NET解决方案

由于我们用的是.net的开发环境。所以在原有解析xml的代码上添加一句就可以

XmlDocument xmlDoc = new XmlDocument();

xmlDoc.LoadXml(xml);
XmlNode xmlNode = xmlDoc.FirstChild;//获取到根节点<xml>
XmlNodeList nodes = xmlNode.ChildNodes;

在空格处添加

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.XmlResolver = null;
xmlDoc.LoadXml(xml);
XmlNode xmlNode = xmlDoc.FirstChild;//获取到根节点<xml>
XmlNodeList nodes = xmlNode.ChildNodes;

总结: 解析xml时候, 没有通过外部实体的加载  ,导致恶意加载文件和代码,造成任意文件攻击

ASP.NET微信支付XXE漏洞修复的更多相关文章

  1. asp.net 微信支付 错误解决方案

    asp.net 微信支付 错误解决方案 在网上看到有人解决方案为: 解决方法 出现这种错误网上查出现有的原因是: 订阅号没有相关的权限 账号没有认证,没有相关的权限 那么这里遇到问题两种都不是.开发账 ...

  2. java中xxe漏洞修复方法

    java中禁止外部实体引用的设置方法不止一种,这样就导致有些开发者修复的时候采用的错误的方法 之所以写这篇文章是有原因的!最早是有朋友在群里发了如下一个pdf, 而当时已经是2019年1月末了,应该不 ...

  3. asp.net微信支付打通发货通知代码

    上次遇到微信支付,发货接口的时候,官方的demo也没有提供相应的代码 ,因本人技术有限,百度 google 很久都没有asp.net 版本的,最后只好硬着头皮自己搞,没想到官方文档也是错的. 我这一步 ...

  4. ASP.NET 微信支付

    一.在支付前期,我们需要获取用户的OpenId,此块内容只针对于JSAPI(微信中直接支付)才需要,如果生成二维码(NATIVE)扫描支付,请跳过此步骤 思路大致是:获取用户的code值 > 根 ...

  5. asp.net微信支付发起页面jsapi.aspx

    jsapi.aspx 后台核心代码 //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(Context); //初始化 p ...

  6. Asp.Net微信支付接口之jsApiPay教程

      1.微信支付JsApiPay只能在微信浏览器中使用 2.必须先申请微信支付功能 3.设置域名 4.设置支付授权目录 一定要精确到最后一级目录 5.获取APPID和AppSecret AppSecr ...

  7. 1.浅谈XXE漏洞攻击与防御

    XML基础 在介绍XXE漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具. XML是一种用于标记电子文 ...

  8. XXE漏洞学习

    0x00 什么是XML 1.定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文 ...

  9. 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用

    浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...

随机推荐

  1. uni-app调用原生的文件系统管理器(可选取附件上传)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  2. javascript中字符串的方法

    字符串的方法 charAt();返回字符串指定索引的字符: concat();连接两个或多个字符串: indexOf();返回字符串中检索指定字符第一次出现的位置: lastIndexOf();返回字 ...

  3. 【由浅入深理解java集合】(四)——集合 Queue

    今天我们来介绍下集合Queue中的几个重要的实现类.关于集合Queue中的内容就比较少了.主要是针对队列这种数据结构的使用来介绍Queue中的实现类. Queue用于模拟队列这种数据结构,队列通常是指 ...

  4. 2018年发表论文阅读:Convolutional Simplex Projection Network for Weakly Supervised Semantic Segmentation

    记笔记目的:刻意地.有意地整理其思路,综合对比,以求借鉴.他山之石,可以攻玉. <Convolutional Simplex Projection Network for Weakly Supe ...

  5. VC调用静态库、动态库

    静态库 // 相对路径 或者 绝对路径 #include "yourlib.h" //相对路径 或者 绝对路径 #pragma comment(lib, "yourlib ...

  6. Windows Internals 笔记——字符和字符串处理

    1.自Windows NT起,Windows的所有版本都完全用Unicode来构建,调用Windows函数时,如果向它传入一个ANSI字符串,那么函数首先会把字符串转换为Unicode,再把结果传给操 ...

  7. VMware虚拟机下安装CentOS6.5

    点击创建虚拟机 选择典型—>下一步 选择安装iso映像文件—>点击浏览选择下载好的centos 镜像文件—>下一步 设置用户和密码—>下一步 设置虚拟机的名字和位置 指定磁盘大 ...

  8. Java Spring Boot VS .NetCore (六) UI thymeleaf vs cshtml

    Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...

  9. python设计模式---创建型之工厂模式

    # coding = utf-8 from abc import ABCMeta, abstractmethod # 简单工厂模式 class Animal(metaclass=ABCMeta): @ ...

  10. IntelliJ IDEA 使提示不区分大小写

    File ==> Settings ==> Editor ==> General ==> Code Completion 第一行 Match case 将默认勾选去掉