微信支付安全

今早收到產(chǎn)品的微信說收到微信通知如下:
【微信支付】安全提醒:請貴司技術(shù)人員排查系統(tǒng)是否存在名為XXE的常見漏洞,其危害較大,點擊查看修復(fù)指引 http://url.cn/55h4BVd ,謝謝。

根據(jù)上面的文檔查看相關(guān)通知接口
發(fā)現(xiàn)我們是用的是dom4j的DocumentHelper

package com.tcl.jsapi.util;

import java.io.StringReader;
import java.util.StringTokenizer;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;

public class SecurityXMPHelper {

    private static final Logger log = Logger.getLogger(SecurityXMPHelper.class);

     public static Document parseText(String text) throws DocumentException {
            Document result = null;

            SAXReader reader = new SAXReader();
            
            try {
                reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
                reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
                reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
                
            } catch (SAXException e) {
                log.error("SAXException", e);
            }
            
            String encoding = getEncoding(text);

            InputSource source = new InputSource(new StringReader(text));
            source.setEncoding(encoding);

            result = reader.read(source);

            // if the XML parser doesn't provide a way to retrieve the encoding,
            // specify it manually
            if (result.getXMLEncoding() == null) {
                result.setXMLEncoding(encoding);
            }

            return result;
        }
     
     private static String getEncoding(String text) {
            String result = null;

            String xml = text.trim();

            if (xml.startsWith("<?xml")) {
                int end = xml.indexOf("?>");
                String sub = xml.substring(0, end);
                StringTokenizer tokens = new StringTokenizer(sub, " =\"\'");

                while (tokens.hasMoreTokens()) {
                    String token = tokens.nextToken();

                    if ("encoding".equals(token)) {
                        if (tokens.hasMoreTokens()) {
                            result = tokens.nextToken();
                        }

                        break;
                    }
                }
            }

            return result;
        }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容