首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

XML 實體引用 DTD 在現代瀏覽器失效的原因與替代方案

     編輯:Java 綜合教學

XML 實體引用 DTD 在現代瀏覽器失效的原因與替代方案

現代瀏覽器(Chrome、Firefox、Edge 等)基於安全考量,預設停用外部實體解析(XXE 防護),導致 XML 中引用外部 DTD 定義的實體(&entityName;)無法展開顯示。

現象說明

<?xml version="1.0"?>
<!DOCTYPE doc SYSTEM "entities.dtd">
<doc>©</doc>  <!-- 瀏覽器顯示空白或報錯 -->

可行替代方案

  1. 內部 DTD 定義實體:將實體宣告移入 XML 內部子集,瀏覽器仍會解析。
    <!DOCTYPE doc [
          <!ENTITY copy "©">
        ]>
  2. 伺服器端預處理:使用 Java DocumentBuilderFactory 設定 FEATURE_SECURE_PROCESSING、EXTERNAL_GENERAL_ENTITIES 等屬性,在後端完成實體展開後再輸出純 XML/HTML 給前端。
  3. 改用 XSLT/XQuery:轉換階段處理實體替換。
  4. 直接寫入 Unicode/字元參考:© 或 ©(HTML 實體),繞過 XML 實體機制。

開發建議

  • 新專案避免依賴 XML 外部實體,改用 JSON、YAML 或內嵌資料。
  • 若必須維護舊 XML,請在伺服器端解析並清理後再傳遞給瀏覽器。
  • 解析 XML 時務必啟用 DocumentBuilderFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true) 防禦 XXE 攻擊。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved