ASP.NET微信支付XXE漏洞修复
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漏洞修复的更多相关文章
- asp.net 微信支付 错误解决方案
asp.net 微信支付 错误解决方案 在网上看到有人解决方案为: 解决方法 出现这种错误网上查出现有的原因是: 订阅号没有相关的权限 账号没有认证,没有相关的权限 那么这里遇到问题两种都不是.开发账 ...
- java中xxe漏洞修复方法
java中禁止外部实体引用的设置方法不止一种,这样就导致有些开发者修复的时候采用的错误的方法 之所以写这篇文章是有原因的!最早是有朋友在群里发了如下一个pdf, 而当时已经是2019年1月末了,应该不 ...
- asp.net微信支付打通发货通知代码
上次遇到微信支付,发货接口的时候,官方的demo也没有提供相应的代码 ,因本人技术有限,百度 google 很久都没有asp.net 版本的,最后只好硬着头皮自己搞,没想到官方文档也是错的. 我这一步 ...
- ASP.NET 微信支付
一.在支付前期,我们需要获取用户的OpenId,此块内容只针对于JSAPI(微信中直接支付)才需要,如果生成二维码(NATIVE)扫描支付,请跳过此步骤 思路大致是:获取用户的code值 > 根 ...
- asp.net微信支付发起页面jsapi.aspx
jsapi.aspx 后台核心代码 //创建支付应答对象 RequestHandler packageReqHandler = new RequestHandler(Context); //初始化 p ...
- Asp.Net微信支付接口之jsApiPay教程
1.微信支付JsApiPay只能在微信浏览器中使用 2.必须先申请微信支付功能 3.设置域名 4.设置支付授权目录 一定要精确到最后一级目录 5.获取APPID和AppSecret AppSecr ...
- 1.浅谈XXE漏洞攻击与防御
XML基础 在介绍XXE漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点是数据的内容,其把数据从HTML分离,是独立于软件和硬件的信息传输工具. XML是一种用于标记电子文 ...
- XXE漏洞学习
0x00 什么是XML 1.定义 XML用于标记电子文件使其具有结构性的标记语言,可以用来标记数据.定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言.XML文档结构包括XML声明.DTD文 ...
- 浅谈XXE漏洞攻击与防御——本质上就是注入,盗取数据用
浅谈XXE漏洞攻击与防御 from:https://thief.one/2017/06/20/1/ XML基础 在介绍xxe漏洞前,先学习温顾一下XML的基础知识.XML被设计为传输和存储数据,其焦点 ...
随机推荐
- 面试容易问到的Linux问题
1.有没有使用过linux?用来干什么? Linux是一个长时间运行比较稳定的操作系统,我们一般会拿它作为服务器. 一下软件(redis等)没有软件包,需要在linux的C编译环境下编译得到软件包. ...
- RFB Net笔记
ECCV2018 论文:Receptive Field Block Net for Accurate and Fast Object Detection 论文链接:https://arxiv.org/ ...
- eclipse格式化代码快捷键失效
原因是与搜狗输入法的“简繁切换”快捷键冲突(取消搜狗输入法的简繁切换快捷键,即可解决)
- SpringBoot图片上传(四) 一个input上传N张图,支持各种类型
简单介绍:需求上让实现,图片上传,并且可以一次上传9张图,图片格式还有要求,网上找了一个测试了下,好用,不过也得改,仅仅是实现了功能,其他不尽合理的地方,还需自己打磨. 代码: //html<d ...
- (五)Knockout template模版渲染
基础 template绑定通过模板将数据render到页面.模板绑定对于构建嵌套结构的页面非常方便.默认情况, Knockout用的是流行的jquery.tmpl模板引擎.使用它的话,需要在安装页面下 ...
- Make Eudict for reviewing example sentences
Recently, I've started an activity of recording typical and nice English sentences from dictionaries ...
- python---自己实现双向链表常用功能
这个和单向链表有几个功能是同样的代码. 但在add,insert,append,remove时,由于node拥有prev指针, 所以操作不一样.注意看注释. # coding = utf-8 # 双向 ...
- net core体系-web应用程序-4asp.net core2.0 项目实战(任务管理系统)-1项目说明
https://www.bug2048.com/netcore20180313/ 最近公司的一个小项目尝试使用 .net core作为服务端进行开发,并顺利上线运行了一段时间,整体效果还是比较满意的. ...
- spark DataFrame
DataFrame的推出,让Spark具备了处理大规模结构化数据的能力,不仅比原有的RDD转化方式更加简单易用,而且获得了更高的计算性能.Spark能够轻松实现从MySQL到DataFrame的转化, ...
- 前端技术之--CSS
在标签上设置style属性: background-color: #2459a2; height: 48px; ... 编写css样式: 1. 标签的style属性 2. 写在head里面 style ...