msano / webkitdirectory属性は危険なのか?

Created Fri, 10 Jul 2026 19:30:43 +0000 Modified Fri, 10 Jul 2026 21:23:13 +0000
909 Words

概要

FTPサーバーにフォルダをアップロードする機能を実装した。 この実装にwebkitdirectory属性を使用しているが、公式では以下のような警告があり、この内容について深掘りした。

警告文その1

警告
webkitdirectory 属性は標準ではありませんし、 標準化の過程にも入っていません。 
この属性を Web 上の本番環境で使わないで下さい: なぜなら、この属性を全ユーザーが使えるとは限らないからです。 
また、この属性はクライアントの実装に非互換がある可能性もありますし、 振る舞いが将来変更される可能性もあります。

主な内容としてはwebkitdirectory属性はブラウザに依存するので、ユーザーによっては期待通りに機能しない可能性があるためとのこと。

続いて、

PHP は ブラウザ/ユーザーエージェントから送られてきた相対パスの情報をパースし、 その情報を $_FILES 配列に渡すことだけを行います。 
full_path 配列中の値が、 実際のディレクトリ構造を含んでいるという保証はありません。 
よって、PHP アプリケーションはこの情報を信用してはいけません。

この箇所に触れる前に$_FIELSについて簡単に説明する。$_FILESはPHPで使用できるグローバルな変数で、フォームから送信されるファイルデータはこの変数に格納される。

この$_FILESのデータ構造内で、full_pathは以下のように表示される。

["full_path"]=> array(2) { [0]=> string(15) "test1/.DS_Store" [1]=> string(16) "test1/hellow.pdf" } 

var_dump

PHPはユーザーが送信したデータをチェックしないため、場合によっては意図しないファイルが書き込まれてしまうリスクがある。

警告文その2

別の記事も読む。意図しない挙動について’Path Traversal’と命名されていた。

The full_path array in each $_FILES field is not safe, because it is direct user input. 
All values from this array must be validated to prevent potential vulnerabilities, 
especially when storing the uploaded files in sub directories on the server.

対応

このリスクの対応として、以下が挙げられる。

.. が含まれていないか(意図しないディレクトリの移動)
絶対パスではないか
使用できる文字だけか
想定したディレクトリ配下だけになるか

公式に’この属性を Web 上の本番環境で使わないで下さい’とあったことが深掘りするモチベーションになった。 リスクを考慮し設計を検討したい。