【PHP8.x】libxml_set_external_entity_loader関数の使い方
libxml_set_external_entity_loader関数は、PHPがXMLドキュメント内の外部エンティティを読み込む方法をカスタマイズするためのコールバック関数を設定する関数です。
XMLドキュメントは、文書型定義(DTD)や外部XMLファイルなど、別の場所の情報を参照することがあり、これらを「外部エンティティ」と呼びます。通常PHPは、これらの外部エンティティを自動的に読み込みます。
この関数を使用すると、開発者は独自のコールバック関数を登録し、外部エンティティが参照された際にその関数が呼び出されるように設定できます。これにより、PHPのデフォルトの読み込み動作を上書きし、外部リソースへのアクセスを細かく制御することが可能になります。例えば、セキュリティ上の理由で特定のファイルパスからの読み込みを制限したり、あるいはデータベースなどカスタムのデータソースからエンティティのデータを取得したりといった柔軟な処理を実現できます。
設定するコールバック関数は、XMLパーサーから渡される引数を受け取り、外部エンティティのデータを提供するストリームリソースを返すか、処理できない場合はfalse
を返す必要があります。この機能は強力ですが、悪意のあるXMLドキュメントによるXML外部エンティティ攻撃(XXE攻撃)を防ぐためにも、信頼できないXMLを処理する際には、セキュリティに十分な注意を払って利用することが極めて重要です。この関数は、以前設定されていたエンティティローダー関数を返します。
基本的な使い方
構文(syntax)
<?php
libxml_set_external_entity_loader(function (string $publicId, string $systemId, string $baseUri, string $userData) {
// 外部エンティティを処理するロジックをここに記述します。
// null を返すと、デフォルトのエンティティローダーが呼び出されます。
return null;
});
?>
引数(parameters)
?callable $resolver_function = null
- callable $resolver_function: 外部エンティティを解決するためのコールバック関数。
null
を指定すると、libxml はデフォルトのエンティティ解決メカニズムを使用します。
戻り値(return)
void
この関数は、外部エンティティ(XML文書の外部にあるリソース)を読み込むためのコールバック関数を設定するために使用されます。設定が成功したかどうかにかかわらず、戻り値はありません。