ファイル パスの保護: ディレクトリ トラバーサル攻撃の防止
ファイル パスを不適切に処理すると、ディレクトリ トラバーサル攻撃として知られるセキュリティ上の脆弱性が発生する可能性があります。これらの脆弱性により、攻撃者はサーバー上の任意のファイルにアクセスできます。
ディレクトリトラバーサル攻撃とは何ですか?
ディレクトリ トラバーサル攻撃は、攻撃者がファイル パスを操作して、意図したディレクトリの外にあるファイルにアクセスするときに発生します。たとえば、アプリケーションがユーザー指定のファイル パスを検証せずに使用すると、攻撃者は ../../etc/passwd のようなパスを使用してサーバー上の機密ファイルにアクセスする可能性があります。
ディレクトリトラバーサル攻撃の例:
- 脆弱なコード:
const filePath = `public/uploads/${req.params.fileName}`;
ユーザーが ID を指定してファイルをダウンロードできるファイル ダウンロード機能があると想像してください。アプリケーションはユーザー入力から直接ファイル パスを構築する場合があります。
- 悪意のある入力:
/public/uploads/../../secret.txt
ここで、攻撃者は ../../secret.txt などの悪意のある入力を提供し、意図しないファイル アクセスにつながる可能性があります。
- 結果:
アプリケーションがこの入力を検証しない場合、構成ファイルやユーザー データなどの機密ファイルが攻撃者に公開される可能性があります。
このような攻撃を防ぐ例
import path from 'path'; import fs from 'fs/promises'; import { RequestHandler, NextFunction } from 'express'; // Point: 1 const BASE_DIRECTORY = path.resolve(__dirname, 'public/uploads'); export const downloadAttachment: RequestHandler = async (req, res, next: NextFunction) => { // Point: 2 const { fileName } = req.params; // Point: 3 const filePath = path.join(BASE_DIRECTORY, fileName); const resolvedPath = path.resolve(filePath); // Point: 4 if (!resolvedPath.startsWith(BASE_DIRECTORY)) { return res.status(400).json({ message: "Invalid file path" }); } try { // Point: 5 await fs.access(resolvedPath); // Point: 6 res.download(resolvedPath, path.basename(fileName), (err) => { if (err) { return next(err); } }); } catch { // Point: 7 return res.status(404).json({ message: "File not found" }); } };
重要なポイントの説明:
ベース ディレクトリ定義: アクセスを制限するために、ファイル アップロード用の固定ディレクトリを確立します。
ファイル名の抽出: URL パラメーターから要求されたファイル名を取得します。
ファイル パスの構築: ベース ディレクトリと要求されたファイル名を組み合わせてフル パスを作成します。
パス検証: 不正なアクセスを防ぐために、解決されたファイル パスが指定されたベース ディレクトリ内にあることを確認します。
ファイル存在チェック: 構築されたパスにファイルが存在するかどうかを非同期的にチェックします。
ファイル ダウンロード処理: ファイルのダウンロードを開始し、プロセス中に発生する可能性のあるエラーを処理します。
見つからないファイルのエラー処理: 要求されたファイルが存在しない場合は 404 応答を送信します。
謝辞: このドキュメントは PortSwigger Web Security および ChatGPT からの情報を参照しています。
以上がファイル パスの保護: ディレクトリ トラバーサル攻撃の防止の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









