PHP を使用してファイルインクルード攻撃を防ぐ方法

WBOY
リリース: 2023-06-24 18:00:01
オリジナル
1184 人が閲覧しました

インターネットの急速な発展に伴い、セキュリティ問題は無視できない重要な問題となっています。ファイル インクルード攻撃は非常に一般的で危険な攻撃方法ですが、重要なのは、攻撃者がこの脆弱性を利用してサーバー上の機密情報を取得できることです。したがって、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 を使用するためのその他のセキュリティ対策

  1. 危険な関数を無効にする

一部の関数は、eval()、exec( など) システム ファイルにアクセスできます。 )などがあるため、簡単に汚染されたり、誤用されたりする可能性があります。セキュリティを向上させるには、これらの機能を無効にする必要があります。

  1. PHP バージョン

古い PHP バージョンでは、ファイル インクルードの脆弱性のリスクが高くなります。したがって、PHP バージョンを最新の状態に保つことが、脆弱性を軽減し、セキュリティを向上させる 1 つの方法です。

  1. 権限制御

ファイルを実行するスクリプトまたはユーザーのみがファイルを利用できるようにするには、適切な権限制御 (ファイルの所有権やアクセス権など) ) 使用すべきです 。

したがって、PHP を使用して Web アプリケーションを作成する場合は、セキュリティを最優先する必要があります。ホワイトリスト手法の使用、ファイルタイプの制限、危険な機能の無効化、PHP バージョンの更新、アクセス許可制御の使用など、適切なセキュリティ対策を講じることで、ファイルインクルード攻撃のリスクを効果的に軽減できます。

以上がPHP を使用してファイルインクルード攻撃を防ぐ方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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