Shikata Ga Nai

Private? There is no such things.

Webサーバーによる静的ファイルの処理とは?ファイルアップロード脆弱性の理解に必要な基礎知識

Hello there, ('ω')ノ

✅ 静的ファイル(Static Files)とは?

静的ファイルとは、リクエストされるとそのままの内容でレスポンスとして返されるファイルのことです。 サーバー側で特別な処理を行わず、ファイルを読み取ってブラウザに送信するだけです。


📁 静的ファイルの具体例

  • 画像(.jpg, .png, .gif
  • スタイルシート(.css
  • JavaScript(.js
  • フォントファイル(.woff, .ttf
  • HTMLファイル(.html

🧠 サーバーが静的ファイルを処理する基本的な仕組み

🌐 1. リクエストを受け取る

例:ユーザーが以下のURLにアクセス

https://example.com/images/logo.png

📂 2. ファイルパスを解決

サーバーはこのURLに対応するパスを、ファイルシステム上の実際のディレクトリ構造にマッピングしようとします。

ドキュメントルート: /var/www/html/
リクエストパス: /images/logo.png
実ファイルパス: /var/www/html/images/logo.png

📤 3. ファイルをそのまま返す

ファイルが存在していれば、そのバイナリやテキストの内容をクライアントに返します。


🏗️ 現代的なWebサイトの変化

近年では、Webアプリケーションの多くは動的ルーティングを採用しており、 URLパスと実ファイルの場所が一致しないケースが増えています。

例:

https://example.com/user/john

これは実際には /user.php?username=john にマッピングされていたり、 ReactなどのSPAではURLパスに関係なく index.html を返していたりします。


それでも静的ファイルは生き残っている

  • CSS, 画像, JavaScriptなどは 依然として静的ファイルとして処理される
  • 多くのサーバーは /static//assets/ のようなパスを、 ファイルシステムの特定フォルダに直接マッピングして返却している

🔐 ファイルアップロード脆弱性との関係

📌 なぜこの知識が重要なのか?

攻撃者が .php.jsp のようなスクリプトファイルをアップロードできたときに、 そのファイルが静的ファイルとして処理されるかどうか が、 脆弱性の有無に直結します。


🧨 危険なシナリオ

  1. 攻撃者が shell.php/uploads/shell.php にアップロード
  2. サーバーが /uploads/ を静的ファイルディレクトリとして公開
  3. https://example.com/uploads/shell.php にアクセス → PHPコードが実行される

🛡️ 安全な設計ではこうする

  • /uploads/ を実行不可能な場所に設定(.php を実行せずそのまま表示する)
  • .php ファイルは /var/www/html/secure-scripts/ のような特定ディレクトリ内でのみ実行可にする

🎯 まとめ:静的ファイル処理の基本を理解することで攻撃経路が見えてくる!

静的ファイルの処理はファイルシステムとの1対1のマッピングに依存する攻撃者はこの仕組みを利用して、意図しないコード実行を試みるどこが実行可能で、どこが単なるファイル置き場なのか を見極めることが脆弱性調査の鍵になる

「Webサーバーの基礎動作を理解すること=脆弱性の本質を突く力」 ファイルアップロード脆弱性を深く理解するために、静的ファイル処理の仕組みは欠かせません!

Best regards, (^^ゞ