在 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);
}
(PHP 5 >= 5.2.11, PHP 7, PHP 8)
libxml_disable_entity_loader — 停用載入外部實體的功能
此函式自 PHP 8.0.0 起已遭 *_棄用*_。強烈建議不要依賴此函式。
停用/啟用載入外部實體的功能。請注意,停用外部實體的載入可能會導致載入 XML 文件時出現一般性問題。
從 libxml 2.9.0 開始,預設情況下會停用實體替換,因此除非需要使用 LIBXML_NOENT
、LIBXML_DTDVALID
或 LIBXML_DTDLOAD
解析內部實體參考,否則無需停用外部實體的載入。一般來說,最好使用 libxml_set_external_entity_loader() 來抑制外部實體的載入。LIBXML_NO_XXE
常數也可以用於防止此情況(僅在 Libxml >= 2.13.0 中可用,從 PHP 8.4.0 開始)。
傳回先前的值。
版本 | 說明 |
---|---|
8.0.0 | 此函式已被棄用。 |
LIBXML_NOENT
常數LIBXML_DTDVALID
常數LIBXML_NO_XXE
常數在 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);
}
6 年前
libxml_disable_entity_loader(true);
如果呼叫了
,它會導致新的 SoapClient(.) 失敗,並顯示
SOAP-ERROR: Parsing WSDL: 無法從 'D:\path/dm_operations.wsdl' 載入 : 無法載入外部實體 "D:\path/dm_operations.wsdl
因為這個 wsdl 將一個 xsd 作為另一個外部檔案匯入。
1 年前
suconghou 2 年前發佈的程式碼中,PHP_VERSION_ID 前面有一個額外的 \ 應該刪除。
libxml_disable_entity_loader(true);
}
請注意,這也會停用 `simplexml_load_file()` 和其他可能處理 URL 的基於 libxml 函數中的 URL 加載功能。
使用此函數,您可以防止本地和遠端檔案包含攻擊的漏洞。
您可以在以下範例中看到,我載入並驗證以下字串:
<!DOCTYPE scan [<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=/etc/passwd">]>
<scan>&test;</scan>
防止回傳檔案的一種方法是將此值設為 0。
請仔細查看 Symfony 2.0.11 的版本說明。