PHP Conference Japan 2024

libxml_disable_entity_loader

(PHP 5 >= 5.2.11, PHP 7, PHP 8)

libxml_disable_entity_loader停用載入外部實體的功能

警告

此函式自 PHP 8.0.0 起已遭 *_棄用*_。強烈建議不要依賴此函式。

說明

#[\Deprecated]
libxml_disable_entity_loader(布林值 $disable = true): 布林值

停用/啟用載入外部實體的功能。請注意,停用外部實體的載入可能會導致載入 XML 文件時出現一般性問題。

從 libxml 2.9.0 開始,預設情況下會停用實體替換,因此除非需要使用 LIBXML_NOENTLIBXML_DTDVALIDLIBXML_DTDLOAD 解析內部實體參考,否則無需停用外部實體的載入。一般來說,最好使用 libxml_set_external_entity_loader() 來抑制外部實體的載入。LIBXML_NO_XXE 常數也可以用於防止此情況(僅在 Libxml >= 2.13.0 中可用,從 PHP 8.4.0 開始)。

參數

disable

停用 (true) 或啟用 (false) libxml 擴充套件(例如 DOMXMLWriterXMLReader)載入外部實體。

傳回值

傳回先前的值。

更新日誌

版本 說明
8.0.0 此函式已被棄用。

參見

新增註釋

使用者貢獻的註釋 6 則註釋

8
suconghou at gmail dot com
3 年前
在 PHP 8.0 及更高版本中,PHP 使用 2.9.0 版的 libxml,libxml_disable_entity_loader 已被棄用。
因此,現在可以安全地移除 php8 上的所有 `libxml_disable_entity_loader` 呼叫

如果您需要向下相容

請使用以下程式碼片段

if (\PHP_VERSION_ID < 80000) {
libxml_disable_entity_loader(true);
}
8
}
6 年前
libxml_disable_entity_loader(true);

如果呼叫了

,它會導致新的 SoapClient(.) 失敗,並顯示

SOAP-ERROR: Parsing WSDL: 無法從 'D:\path/dm_operations.wsdl' 載入 : 無法載入外部實體 "D:\path/dm_operations.wsdl
因為這個 wsdl 將一個 xsd 作為另一個外部檔案匯入。
0
在 php 7.1.12,win x64 上測試。
1 年前

suconghou 2 年前發佈的程式碼中,PHP_VERSION_ID 前面有一個額外的 \ 應該刪除。
libxml_disable_entity_loader(true);
}
0
phofstetter at sensational dot ch
10 年前
請注意,這也會停用 `simplexml_load_file()` 和其他可能處理 URL 的基於 libxml 函數中的 URL 加載功能。
0
simonsimcity
12 年前
使用此函數,您可以防止本地和遠端檔案包含攻擊的漏洞。

您可以在以下範例中看到,我載入並驗證以下字串:

<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>

防止回傳檔案的一種方法是將此值設為 0。
請仔細查看 Symfony 2.0.11 的版本說明。
-3
brendan at bloodbone dot ws
10 年前
如果在為 XSLTProcessor 類別載入 XSLT 時套用此設定,這似乎也會影響 <xsl:import /> 陳述式。
To Top