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. SpringMVC的入门示例

    1.配置流程说明 第一步:导入包 第二步:构建一个请求,编写请求页面 第三步:配置核心控制器 第四步:构建一个业务控制器 第五步:编写Spring配置文件 第六步:编写一个返回页面 2.配置流程--- ...

  2. hdu4507 数位dp+推公式

    推公式的能力需要锻炼.. /* dp的时候要存结构体 里面三个元素: cnt,就是满足条件的个数 sum1,就是满足条件的数字和 sum2,满足条件的数字平方和 推导过程:还是用记忆化搜索模板 dp[ ...

  3. mysql 的crud操作(增删改查)

    1.mysql添加记录 --添加记录的语法(可添加单条记录或者多条记录),INTO是可以省略的,字段名也可以省略的,但是如果省略的话,后面对应的value的值就要全部填写 INSERT [INTO] ...

  4. SpringBoot系列二:SpringBoot自动配置原理

    主程序类的注解 @SpringBootApplication 注解,它其实是个组合注解,源码如下: @Target({ElementType.TYPE}) @Retention(RetentionPo ...

  5. Java Web 中使用ffmpeg实现视频转码、视频截图

    Java Web 中使用ffmpeg实现视频转码.视频截图 转载自:[ http://www.cnblogs.com/dennisit/archive/2013/02/16/2913287.html  ...

  6. 烽火R2600交换机配置脚本

    烽火交换机端口映射配置 ip nat inside source static udp iP 端口号 公网iP 端口号 ip nat inside source interface Vlan-intf ...

  7. git生成ssh key步骤并添加到github网站

    0: 查看是否已经有了ssh密钥 执行命令:cd ~/.ssh 如果没有密钥则不会有此文件夹,有则备份删除 1:使用 Git Bash生成新的ssh key ssh-keygen -t rsa -C  ...

  8. 解除vnc viewer键盘快捷键的禁用

    解除VNC的键盘禁用: vnc viewer 局域网中用来听课用,alt+tab用不了不能切换其他窗口,很不方便.具体步骤: F8(或者窗口上边缘的设置按钮)——>options——>ad ...

  9. LightOJ 1031 Easy Game (区间DP)

    <题目链接> 题目大意: 给定一段序列,两人轮流取数,每人每次只能从序列的两端的任意一段取数,取的数字位置必须连续,个数不限,问你这两人取数的最大差值是多少. 解题分析: 每人取数时面对的 ...

  10. 当linux报 “-bash: fork: 无法分配内存”

    “-bash: fork: 无法分配内存”,发现连了好多终端,然后断开了一个终端,然后这边终端可以敲命令了 [root@172.16.31.105 /home/www/test]# free -m  ...