入力画面>確認画面>実登録という3ステップです。
画像をアップロードさせたい場合、確認画面で実際の画像を表示して確認させたいと思っています。ところが表示させる為には一旦ドキュメントルート以下に一時的に画像ファイルを書き出す必要があるかと思います。この場合、他の人からの同時アクセスがある事を考え、一時画像ファイルはセッションIDをMD5で暗号化した物などを使って一時ファイルとして書き出そうと考えました。ここで2つの問題があります。
(1)セッションIDをもとにする文字列をさらしてセキュリティー上問題があるか?その場合セッション固有の文字列を作り出す代用方法はあるか
(2)確認画面で、ブラウザを閉じたり、途中で作業を中断した場合、どんどん一時ファイルが蓄積されていってしまい、定期的に削除するメンテナンスが必要だと思われる。これを回避する良い方法は無いか?
まさにこのはてな?の投稿画面が画像の処理に関して、同じ様な仕組みのようです。上記の他にももっと簡単なアイディアなどのご提案でもかまいません。よろしくお願いいたします。
(1) について
MD5 は不可逆なので元の文字列がセッション ID であろうと何であろうと元には戻せません。
従って、これについては安全であると考えて良いと思われます。
(2) について
回避する方法ではなく、メンテナンスの方向になってしまいますが。
もしも CRON が使えるのであれば、一日に一度テンポラリファイルのあるディレクトリを走査して、
タイムスタンプが一日以上古い物を自動で削除する様な仕組みにしてはどうでしょうか?
(尤も、これは一時ファイルを生成するタイミングで同じロジックを走らせても実現できますが、何かある度に毎回走査するのは非効率的だと思います)
ユーザーがいつからいつまでテンポラリファイルを必要としているのかは予測する事ができませんので、
どうやっても「何時間以上使われていない」という基準で判断するしかない様に思えます。
その他、画像認証のスクリプトなどを見てみますと、
ディレクトリ下にある生成したキー (テンポラリ画像) の個数が一定以上になった際、
古い物を一つ消して一つを新たに生成する処理をしているものもあります。
こちらの方が確実かもしれませんし、その辺りはケースバイケースといった所でしょう。
(1)
MD5についてありがとうございます。不可逆だったのですね。
(2)
やはりメンテナンスの方法に成るのですね。
>ディレクトリ下にある生成したキー (テンポラリ画像) の個数が一定以上になった際、
>古い物を一つ消して一つを新たに生成する処理をしているものもあります。
ありがとうございます。このアイディアは思いつきませんでした。非常に良いですね。1つ生成する際に、規定個数以上に成った時10削除する事で、処理頻度も軽減できそうです。
非常に有益な情報をありがとうございます。
引き続き1日ほど他のアイディアを集い終了します。ただし、このアイディアよりも効率的な物、あるいはそれに相当するものでより安易な物に限ります。どうぞよろしくお願いいたします。