ホームページ > バックエンド開発 > PHPチュートリアル > PHP を使用して XML 外部エンティティ攻撃 (XXE) から保護する方法

PHP を使用して XML 外部エンティティ攻撃 (XXE) から保護する方法

PHPz
リリース: 2023-06-29 16:02:02
オリジナル
1332 人が閲覧しました

PHP を使用して XML 外部エンティティ攻撃 (XXE) を防御する方法

近年、インターネットの普及と情報交換の増加に伴い、ネットワーク セキュリティの問題にも注目が集まっています。その中でも、XML 外部エンティティ攻撃 (XXE) は一般的なセキュリティ脆弱性です。攻撃者はこの脆弱性を悪用して、サーバー上の機密情報を読み取ったり、さらなる攻撃を実行したりする可能性があります。この記事では、PHP を使用して XML 外部エンティティ攻撃を防御する方法について説明します。

XML 外部エンティティ攻撃は、通常、悪意を持って構築された XML ファイルを通じて実行されます。攻撃者は、XML のエンティティ参照とエンティティ宣言を使用して、ファイル システム上の任意のファイルを読み取り、リモート URL を介して外部リソースを読み取ることもできます。この攻撃は安全でない XML パーサーでは非常に有効であるため、この攻撃を防ぐための対策を講じる必要があります。

PHP を使用して XML 外部エンティティ攻撃を防御する方法をいくつか紹介します:

  1. エンティティ解析を無効にするオプションを使用します:
    PHP の XML パーサーでは、Set を渡すことができます。 XXE 攻撃を防ぐためにエンティティ解決を無効にするオプション。 XML ファイル内でエンティティ参照とエンティティ宣言を使用して、事前定義されたエンティティ (HTML 内のエンティティなど) を表す場合、エンティティ解析を無効にすると解析エラーが発生する可能性があることに注意してください。

次は、無効なエンティティ解決オプションの使用例です:

$dom = new DomDocument();
$dom->loadXML($xmlString, LIBXML_NOENT | LIBXML_NOERROR | LIBXML_NOWARNING);
ログイン後にコピー
  1. 入力のフィルタリング:
    入力検証は、XXE 攻撃を防御するための重要な手順です。ユーザーが指定した XML ファイルに悪意のあるエンティティ参照またはエンティティ宣言が含まれているかどうかを注意深く確認する必要があります。これらは、正規表現または他のフィルタリング方法を使用して検査およびフィルタリングできます。

たとえば、PHP の preg_replace() 関数を使用して、XML の <!ENTITY> ステートメントを除外できます。

$xmlString = preg_replace('/<!ENTITYs+S+s+SYSTEMs+"[^"]*">/', '', $xmlString);
ログイン後にコピー

これにより、XML を解析する前に、XXE 攻撃につながる可能性のある <!ENTITY> ステートメントが確実に除外されます。

  1. ホワイトリストを使用して外部エンティティを検証する:
    特定の外部エンティティを XML ファイル内で参照する必要があることがわかっている場合、ホワイトリスト メカニズムを使用してそれを検証できます。つまり、事前定義した外部エンティティへの参照のみを許可し、他の外部エンティティへの参照を拒否します。

たとえば、<!ENTITY> 宣言で参照されている外部ファイル パスがホワイトリスト リストに含まれているかどうかを確認できます。

$allowedEntities = [
    'http://example.com/file.xml',
    'file:///path/to/file.xml'
];

$xmlString = preg_replace_callback('/<!ENTITYs+(S+)s+SYSTEMs+"([^"]*)">/', function($matches) use ($allowedEntities) {
    if (!in_array($matches[2], $allowedEntities)) {
        // 非法的外部实体
        return '';
    }
    
    return $matches[0];
}, $xmlString);
ログイン後にコピー

上記は、コード 外部ファイル パスがホワイトリストに含まれているかどうかを確認して、XXE 攻撃を防止します。

概要:
PHP 開発では、XML 外部エンティティ攻撃 (XXE) に対する防御が重要なタスクです。エンティティ解決オプションを無効にし、入力をフィルタリングし、ホワイトリスト検証を使用することで、システムのセキュリティを向上させることができます。 XML ファイルの作成と解析には注意し、セキュリティの脆弱性に常に注意を払うことが重要です。

以上がPHP を使用して XML 外部エンティティ攻撃 (XXE) から保護する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート