最近比較火的是微信支付接口存在XML外部實(shí)體注入漏洞(XML External Entity Injection,簡(jiǎn)稱 XXE)。該安全問題是由XML組件默認(rèn)沒有禁用外部實(shí)體引用導(dǎo)致,黑客可以偽造一個(gè)請(qǐng)求讓支付商戶誤以為訂單支付了,其實(shí)訂單并沒有支付,這樣黑客就可以0元買任何商品。
這個(gè)漏洞是在微信支付接口通知是否支付的環(huán)節(jié)出現(xiàn)漏洞。主要發(fā)生在以下場(chǎng)景。
場(chǎng)景1:支付成功通知;
場(chǎng)景2:退款成功通知;
場(chǎng)景3:委托代扣簽約、解約、扣款通知;
場(chǎng)景4:車主解約通知;
這個(gè)漏洞影響性還是蠻大的,可以直接導(dǎo)致商家金錢損失,尤其是有微信支付功能模塊的自動(dòng)發(fā)貨的系統(tǒng)及銷售虛擬商品的商城。
黑客能利用這個(gè)漏洞的條件有兩個(gè):
一、知道怎么使用XML外部實(shí)體注入漏洞;(因?yàn)槁┒匆呀?jīng)被公開,大家都知道,可恨的是很多人把攻擊的方式都公開了!?。?!)
二、知道微信支付通知的地址;(這個(gè)開源建站系統(tǒng)因?yàn)樵创a是公開的,所以基本不用猜都知道,而定制建站系統(tǒng)則比較難猜,所以定制建站系統(tǒng)還有一層防護(hù))
所以對(duì)于開源建站系統(tǒng),源代碼大家都知道,微信支付通知的地址自然是清楚了,這也暴露了很多開源建站系統(tǒng)的軟肋,方維網(wǎng)絡(luò)建議:做網(wǎng)站還是建議采用定制建站,就算出現(xiàn)漏洞,因?yàn)榇a不開源,所以自然而然多一重安全保障。
這個(gè)漏洞如何修補(bǔ)呢?
如果是PHP網(wǎng)站,非常簡(jiǎn)單,一句話解決libxml_disable_entity_loader(true);
如下代碼示例:
//將XML轉(zhuǎn)為array
function xmlToArray($xml) {
//禁止引用外部xml實(shí)體 libxml_disable_entity_loader(true);
$values = json_decode(json_encode(simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA)), true);
return $values;
}
如果是ASP.NET網(wǎng)站
【.Net】
XmlDocument doc= new XmlDocument();
doc.XmlResolver = null;
微信官方也給每個(gè)商戶推送了這個(gè)接口安全漏洞,也給出了各個(gè)程序語言的修復(fù)方法,APP SDK 不受影響,主要還是網(wǎng)站。
如果你是商家,這個(gè)漏洞還沒有修復(fù),建議財(cái)務(wù)對(duì)每一筆訂單進(jìn)行二次審核,通過登錄微信支付管理后臺(tái)查看訂單數(shù)據(jù),再次審核訂單支付是否真實(shí)來決定是否發(fā)貨。
如果你是方維網(wǎng)絡(luò)的客戶,那么你不用擔(dān)心,我們技術(shù)會(huì)免費(fèi)為你修補(bǔ)這個(gè)漏洞。
方維網(wǎng)絡(luò)專注于網(wǎng)站建設(shè)、微信小程序、APP開發(fā),目前在深圳和廣州均有分公司,歡迎廣大客戶咨詢400-800-9385!