以前、「Windows版PHPのbasename関数はドライブレターを除去しない場合がある」にて、Windows版PHPのbasename関数が c:autoexec.bat などに対してそのままの文字列を返す(ドライブレター c: を除去しない)問題を報告しました。
この問題をBug #66395として報告したところ、PHP5.4.25 / PHP5.5.9にて改修されました。これらのリリースは約1ヶ月前で、そろそろ次のバージョンがリリースされますが確認が遅れておりました。
具体的には、数の左側の入力に対して、矢印の右側の結果となります。
bbb/c:autoexec.bat → autoexec.bat
bbb/cc:autoexec.bat → cc:autoexec.bat
c:bb/autoexec.bat → autoexec.bat
2番目の結果に違和感のある方がおられると思いますが、これはNTFSのストリームという機能に対応したものです。ストリームについては下記を参照下さい。
当初は、1番目の例も(ストリームの書式として)c:autoexec.bat と変換されていましたが、私から追記として指摘(PHPはNTFSストリームに対応していないし、パストラバーサル対策としてはまずいよ)したところ、いやいやPHPはNTFSストリームに対応しているよ(私の確認不足でした)という返答でしたが、最終的に、コロンの前(こちらがファイル名で、コロンの後ろがストリーム名)が一文字の場合は除去するというアドホックな仕様に落ち着いたようです
個人的には、NTFSストリームはExplorer等のWindows標準ツールでも上手く扱えないものを認めても混乱の元となるだけだと思いますが、まぁ独自のこだわりがあったのでしょう。最終的な仕様は許容できるものだと思います。
ということで、Windows版PHPをお使いの方は、最新のPHPにバージョンアップを推奨します。ただし、PHP5.3の最新版5.3.28では、この問題は直っていません。
また、アプリケーション側では、basename関数を通すだけでなく、「安全なウェブサイトの作り方」にあるように、「固定のディレクトリを指定」するようにしてください。そうすれば、basename関数のBug #66395の影響を受けなくなります。
登録:
コメントの投稿 (Atom)
フォロワー
ブログ アーカイブ
-
▼
2014
(32)
-
▼
3月
(9)
- ANAの個人情報開示請求により1ヶ月間のログイン履歴が確認できた
- とあるECサイトのアクセス制御不備
- ANAマイレージクラブのログインを少しでも安全にする運用を考えてみたが見つからない
- 徳丸本Kindle版が半額(1,400円)となるキャンペーン始まりました
- ANAの不正ログイン事件について徳丸さんに聞いてみた
- cheeers! のオープンリダイレクタ脆弱性が修正された
- よくわかるPHPの教科書 PHP5.5対応版のクロスサイト・スクリプティング
- Windows版PHPのbasename関数がドライブレターを除去しない問題はPHP5.4.25/P...
- 正規表現によるバリデーションでは ^ と $ ではなく \A と \z を使おう
-
▼
3月
(9)
0 件のコメント:
コメントを投稿