ホームページ  >  記事  >  バックエンド開発  >  PHP セキュリティ ガイド: パス トラバーサルおよび任意のファイル アップロードの脆弱性の防止

PHP セキュリティ ガイド: パス トラバーサルおよび任意のファイル アップロードの脆弱性の防止

PHPz
PHPzオリジナル
2023-07-01 08:13:371019ブラウズ

PHP セキュリティ ガイド: パス トラバーサルおよび任意のファイル アップロードの脆弱性の防止

はじめに:
インターネットの急速な発展に伴い、PHP は非常に人気のある Web 開発言語として、さまざまな Web サイトや Web サイトで広く使用されています。アプリケーションは開発中です。ただし、PHP の柔軟性とオープン性により、ハッカーに脆弱性を悪用する機会も与えられます。この記事では、パス トラバーサルの脆弱性と任意のファイル アップロードの脆弱性という 2 つの一般的なセキュリティ脆弱性に焦点を当て、対応する予防策を提供します。

1. パス トラバーサルの脆弱性
パス トラバーサルの脆弱性とは、攻撃者が URL パラメーターを変更して、指定されたパス範囲から飛び出し、システム内の機密ファイルにアクセスすることを意味します。以下は一般的なコード例です。

$file = $_GET['file'];
include '/path/to/files/' . $file;

攻撃者は、ファイル パラメータを「../config.php」として渡すことにより、/config.php などの機密ファイルにアクセスする可能性があります。パス トラバーサルの脆弱性を防ぐには、次の措置を講じる必要があります。

  • 入力検証: ユーザーが入力したファイル名パラメータに対して必要な検証を実行し、特定の形式のファイル名のみを許可します。特定の範囲内で。正規表現またはホワイトリストを使用して、ユーザー入力をフィルタリングできます。
$file = $_GET['file'];
if (!preg_match('/^[a-zA-Z0-9]{1,20}.(jpg|png|gif)$/', $file)) {
    die('Invalid file name');
}
  • ファイル パス チェック: ファイルを参照する前に、ファイル パス チェックを実行して、ファイル パスが指定された範囲内にあることを確認します。 realpath() 関数を使用すると、ファイルの絶対パスを取得し、それを事前に設定されたベース パスと比較できます。
$file = $_GET['file'];
$basePath = '/path/to/files/';
$fullPath = realpath($basePath . $file);
if ($fullPath === false || strncmp($fullPath, $basePath, strlen($basePath)) !== 0) {
    die('Invalid file path');
}

2. 任意のファイル アップロードの脆弱性
任意のファイル アップロードの脆弱性とは、攻撃者がアップロード機能を使用して悪意のあるファイルをサーバーにアップロードし、その中の悪意のあるコードを実行することで、サーバーまたは機密情報の取得。任意のファイル アップロードの脆弱性を防ぐための対策は次のとおりです。

  • ファイル タイプの検証: アップロードされたファイルについては、そのファイル タイプを検証する必要があります。 $_FILES['file']['type'] パラメーターを使用してファイル タイプを特定し、信頼できるファイル タイプと比較できます。 $_FILES'file' の値が信頼できない場合は、ファイルのヘッダー情報から判断できます。
$fileType = $_FILES['file']['type'];
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($fileType, $allowedTypes)) {
    die('Invalid file type');
}
  • ファイル拡張子の検証: ファイルの種類の検証に加えて、ファイル拡張子も検証する必要があります。 pathinfo() 関数を使用してファイル拡張子を取得し、それをホワイトリストと比較できます。
$fileName = $_FILES['file']['name'];
$allowedExtensions = ['jpg', 'png', 'gif'];
$fileExtension = pathinfo($fileName, PATHINFO_EXTENSION);
if (!in_array($fileExtension, $allowedExtensions)) {
    die('Invalid file extension');
}
  • ファイル コンテンツの検証: 上記の検証に合格した場合でも、ファイルのコンテンツをさらに検証する必要があります。ファイル読み取り機能を使用して、ファイルの内容を読み取り、ファイルの内容が期待どおりであることを確認できます。
$filePath = $_FILES['file']['tmp_name'];
$fileContent = file_get_contents($filePath);
if (strpos($fileContent, 'malicious code') !== false) {
    die('Invalid file content');
}

結論:
パストラバーサルの脆弱性と任意のファイルアップロードの脆弱性は、PHP 開発プロセスで発生しやすいセキュリティ問題です。これらの脆弱性は、ユーザー入力の厳密なフィルタリングと検証、およびファイルの種類、拡張子、およびファイルの内容のチェックによって効果的に防止できます。同時に、PHP の公式セキュリティ発表や最新のセキュリティ修正に細心の注意を払い、PHP のバージョンを適時に更新することも、システムのセキュリティを保護するための重要な対策です。

以上がPHP セキュリティ ガイド: パス トラバーサルおよび任意のファイル アップロードの脆弱性の防止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。