プロが教える店舗&オフィスのセキュリティ対策術

PHPアプリケーション上でファイルをアップロードすると、$_FILESにいくつか情報が格納されます。
その中の一つ["tmp_name"]にはテンポラリファイル名(デフォルトだと/tmp/XXXXX...でしょうか)が
格納されていますが、このテンポラリファイル名の「命名規約」について、解説のページ・書籍等はないのでしょうか?

いろいろ見ているとファイル名の先頭は「php」であったり、大小英数字がランダムで設定されていたりしていることは見て取れたのですが、バラバラで規則じみていなかったもので...。


こんな質問で恐縮なのですがご存知の方いらっしゃいましたら、ご回答のほどお願いいたします。

A 回答 (1件)

Github - php-src


https://github.com/php/php-src/

こちらからC言語で書かれたPHPの構成コードを検索してみました。

1. 「tmp_name」で検索
2. 検索結果より、「tmp_name」はC言語中の変数では「temp_filename」に対応していると推測
3. 「fd = php_open_temporary_fd_ex(PG(upload_tmp_dir), "php", &temp_filename, 1 TSRMLS_CC);」に目をつける
4. 「php_open_temporary_fd_ex」のプロトタイプを見ると第2引数が「const char *pfx」となっているので、これが「prefix」を意味すると推測
5. 「fd = php_do_open_temporary_file(dir, pfx, opened_path_p TSRMLS_CC);」に目をつける
6. 結果的にWindowsAPIの「GetTempFileName」もしくはLinuxAPIの「mkstemp」「mktemp+VCWD_OPEN」を叩いているところにたどり着く

コードを見る限り、OSがランダム生成した文字列にプレフィックス「php」を付加していることは確認できますね。各APIに関しては下を参照してください。mktempはファイル名を得るだけの関数で自前で作成(VCWD_OPENをコール)しなければなりませんが、自動的に作成してくれるmkstempがコール可能な場合はそちらを利用する実装になっているようです。

GetTempFileName
http://msdn.microsoft.com/ja-jp/library/cc429354 …

mkstemp
http://kazmax.zpp.jp/cmd/m/mkstemp.3.html

mktemp
http://kazmax.zpp.jp/cmd/m/mktemp.3.html
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!