【PHP8.x】resolveExternalsプロパティの使い方
resolveExternalsプロパティの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
resolveExternalsプロパティは、PHPのDOMDocumentクラスにおいて、XML文書が外部エンティティを参照する際に、その外部エンティティを解決(ロード)するかどうかを制御するための真偽値(trueまたはfalse)を保持するプロパティです。
このプロパティをtrueに設定すると、DOMDocumentオブジェクトがXML文書を解析する際、文書内に記述された外部のDTD(Document Type Definition)ファイルや、別のXMLファイルなどの外部リソースへの参照を解決し、その内容をDOMツリーに含めようとします。一方で、falseに設定すると、これらの外部参照は無視され、パーサーは外部リソースをロードしようとしません。
PHP 8以降では、このresolveExternalsプロパティのデフォルト値はfalseに変更されました。これはセキュリティ上の理由から非常に重要な変更点です。外部エンティティの解決を許可すると、XML外部エンティティ攻撃(XXE攻撃)と呼ばれるセキュリティ上の脆弱性が生じる可能性があります。悪意のあるXML文書を処理した場合、システム内の機密情報が漏洩したり、不要なファイルが読み込まれたりする危険性があるため、信頼できないソースからのXML文書を扱う際には、このプロパティをfalseに設定し続けるか、明示的にfalseに設定することが強く推奨されます。
特定のビジネスロジックで外部DTDやXMLスキーマを参照し、文書の完全な構造検証や変換に外部ファイルのロードが不可欠な場合にのみ、セキュリティリスクを十分に理解した上で、このプロパティをtrueに設定することを検討してください。
構文(syntax)
1<?php 2$dom = new DOMDocument(); 3$dom->resolveExternals = true; // または false 4?>
引数(parameters)
引数なし
引数はありません
戻り値(return)
bool
このプロパティは、外部リソース(DTDなど)を解決するかどうかを示します。trueであれば解決し、falseであれば解決しません。