微信支付接口存在XML解析安全漏洞
最近比较火的是微信支付接口存在XML外部实体注入漏洞(XML External Entity Injection,简称 XXE)。该安全问题是由XML组件默认没有禁用外部实体引用导致,黑客可以伪造一个请求让支付商户误以为订单支付了,其实订单并没有支付,这样黑客就可以0元买任何商品。
这个漏洞是在微信支付接口通知是否支付的环节出现漏洞。主要发生在以下场景。
场景1:支付成功通知;
场景2:退款成功通知;
场景3:委托代扣签约、解约、扣款通知;
场景4:车主解约通知;
这个漏洞影响性还是蛮大的,可以直接导致商家金钱损失,尤其是有微信支付功能模块的自动发货的系统及销售虚拟商品的商城。
黑客能利用这个漏洞的条件有两个:
一、知道怎么使用XML外部实体注入漏洞;(因为漏洞已经被公开,大家都知道,可恨的是很多人把攻击的方式都公开了!!!!)
二、知道微信支付通知的地址;(这个开源建站系统因为源代码是公开的,所以基本不用猜都知道,而定制建站系统则比较难猜,所以定制建站系统还有一层防护)
所以对于开源建站系统,源代码大家都知道,微信支付通知的地址自然是清楚了,这也暴露了很多开源建站系统的软肋,优加网络建议:做网站还是建议采用定制建站,就算出现漏洞,因为代码不开源,所以自然而然多一重安全保障。
这个漏洞如何修补呢?
如果是PHP网站,非常简单,一句话解决libxml_disable_entity_loader(true);
如下代码示例:
//将XML转为array
function xmlToArray($xml) {
//禁止引用外部xml实体 libxml_disable_entity_loader(true);
$values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $values;
}
如果是ASP.NET网站
【.Net】
XmlDocument doc= new XmlDocument();
doc.XmlResolver = null;
微信官方也给每个商户推送了这个接口安全漏洞,也给出了各个程序语言的修复方法,APP SDK 不受影响,主要还是网站。
如果你是商家,这个漏洞还没有修复,建议财务对每一笔订单进行二次审核,通过登录微信支付管理后台查看订单数据,再次审核订单支付是否真实来决定是否发货。
如果你是优加网络的客户,那么你不用担心,我们技术会免费为你修补这个漏洞。
优加网络专注于网站建设、微信小程序、APP开发,目前在佛山和广州均有分公司,欢迎广大客户咨询400-800-9385!