インターネットの急速な発展に伴い、セキュリティ問題は無視できない重要な問題となっています。ファイル インクルード攻撃は非常に一般的で危険な攻撃方法ですが、重要なのは、攻撃者がこの脆弱性を利用してサーバー上の機密情報を取得できることです。したがって、PHP を使用してファイルインクルード攻撃を防ぐ方法は、多くの開発者が解決しなければならない問題となっています。
1. ファイル インクルージョン攻撃を理解する
ファイル インクルージョン攻撃は一般的な Web 攻撃であり、OWASP (Open Web Application Security Project) の Web セキュリティ脆弱性トップ 10 の 1 つにリストされています。これは、ローカル ファイル インクルージョン (LFI) とリモート ファイル インクルージョン (RFI) に分類できます。
フィルタリングされていない外部データを使用してファイル パスを生成すると、LFI 攻撃に対して脆弱になります。たとえば、次のコードは、ユーザーが送信したファイル名とパス名を連結します。
<?php $file = '/home/user/'. $_GET['file']; include($file); ?>
LFI 攻撃は、ユーザーが ../ などの相対パスを使用してデータを提供すると発生します。
RFI 攻撃は、攻撃者がサーバー内で独自のリモート コードを実行できることを意味します。たとえば、次のコードには、file_get_contents() 関数を通じて直接ユーザーが送信した URL が含まれています。
<?php $url = $_GET['url']; $content = file_get_contents($url); echo $content; ?>
RFI 攻撃は、攻撃者が独自の悪意のある URL を提供すると発生します。
2. LFI 攻撃の防止
LFI 攻撃を防止するには、ユーザーが指定したファイル名とパスをフィルターする必要があります。絶対パスの使用は、LFI 攻撃を防ぐ良い方法です。
次は、含めることが許可されているファイル名とパスを含むホワイトリスト アプローチを使用した、可能なフィルタリングの例です。
<?php $allowed_files = array("file1.php", "file2.php"); $allowed_paths = array("/path1/", "/path2/"); $file = $_GET['file']; $path = $_GET['path']; if (!in_array($file, $allowed_files) || !in_array($path, $allowed_paths)) { die("Access Denied"); } include("/home/user/" . $path . $file); ?>
ホワイトリスト アプローチを使用すると、LFI 攻撃のリスクを軽減できます。ホワイトリスト方式を使用したくない場合は、ファイル タイプを制限する方法も使用できます。
<?php $file = $_GET['file']; // 判断$file是否是php文件 if (!preg_match("/.php$/", $file)) { die("Access Denied"); } include("/home/user/" . $file); ?>
ファイル タイプを制限すると、他のファイル タイプが含まれないようにすることができます。
3. RFI 攻撃の防止
RFI 攻撃を防止するには、ユーザーが提供した URL をフィルターする必要があります。ホワイトリストを使用する場合は、指定したリモート サーバーへのアクセスのみを許可する必要があります。たとえば、php.ini ファイルでallow_url_fopen オプションを設定したり、curl 関数を使用したりできます。
次に、RFI 攻撃を防止する例を示します。
<?php $url = $_GET['url']; // 验证是否是信任的主机 if (!preg_match("/^http://(192.168.0.16|www.example.com)/", $url)) { die("Access Denied"); } $content = file_get_contents($url); echo $content; ?>
この例では、検証プロセスを指定したホストに制限します。
4. PHP を使用するためのその他のセキュリティ対策
一部の関数は、eval()、exec( など) システム ファイルにアクセスできます。 )などがあるため、簡単に汚染されたり、誤用されたりする可能性があります。セキュリティを向上させるには、これらの機能を無効にする必要があります。
古い PHP バージョンでは、ファイル インクルードの脆弱性のリスクが高くなります。したがって、PHP バージョンを最新の状態に保つことが、脆弱性を軽減し、セキュリティを向上させる 1 つの方法です。
ファイルを実行するスクリプトまたはユーザーのみがファイルを利用できるようにするには、適切な権限制御 (ファイルの所有権やアクセス権など) ) 使用すべきです 。
したがって、PHP を使用して Web アプリケーションを作成する場合は、セキュリティを最優先する必要があります。ホワイトリスト手法の使用、ファイルタイプの制限、危険な機能の無効化、PHP バージョンの更新、アクセス許可制御の使用など、適切なセキュリティ対策を講じることで、ファイルインクルード攻撃のリスクを効果的に軽減できます。
以上がPHP を使用してファイルインクルード攻撃を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。