ユーザーにダウンロードする機密ファイルがあり、各ユーザーは特定のファイルを1回だけダウンロードできます。ダウンロードが失敗した場合、再ダウンロードを許可しますが、それ以外の場合は許可しません。
サーバーでのファイルのダウンロードrequestのログ記録/処理に依存するだけでは十分ではありません。ファイルが完成し、サーバーの適切な場所にあることを確定的に知る必要があります。私のユーザーの多くは、頻繁に接続が切断される環境で作業しているためです。
これが機能する最も簡単な方法は、ブラウザーが[名前を付けて保存...]ダイアログから "ファイル保存"イベントを公開し、ダウンロードページのJavaScript関数(サーバーにポストバックできる)に接続できる場合です。しかし、直感では、ブラウザがサンドボックスの外に潜入しているため、ブラウザがこの機能を公開した場合、セキュリティホールが存在する可能性があることを示唆しています。これが可能かどうかはわかりません。
I foundseveralotherquestionsthis area 、しかし特にこの問題については何もない。
何か案は?
編集:私は元の質問で「セキュリティ」という言葉を使用するべきではありませんでした。申し訳ありませんが、赤いニシンを引き起こしてしまいました。
編集2:私の「セキュリティ」の言い回しで、人をトピック外の技術的なセキュリティ問題に誤解させましたが、どちらも「いいえ、ブラウザのサポートがない」という私の疑いを確認しましたそれ。"彼の最初の文が私が探していたものであったので、私は答えで最初のコメンターをマークしています。皆さんありがとう。
JavaScriptにはそのようなブラウザイベントはありません。たとえあったとしても、ユーザーのブラウザを信頼してセキュリティを提供することはできません。
GUID=を使用して、ダウンロードごとに一意のURLを生成することをお勧めします。たとえば、次のことができます。
最後の箇条書きを明確にしましょう。 Javaを使用しているとしましょう-EOFまでループでin.read(buffer)
とout.write(buffer)
を実行します。クライアントが切断すると、IOException
の実行中にout.write()
を実行すると、中断されたダウンロードからダウンロードが成功したことを確認できます。他のプラットフォームでは、接続が失われたかどうかを確認する方法があるはずです。
EDIT:リンクした質問の の承認された回答で概説されているトリックを使用して、ブラウザイベントを実際に発生させることができます 。ただし、ダウンロード数を制限するための信頼できるソリューションではありません。
これは良い解決策です:
http://gruffcode.com/2010/10/28/detecting-the-file-download-dialog-in-the-browser/
これは基本的に、ダウンロードしたファイルの応答ヘッダーにCookieを設定することで機能するため、JavaScriptはこのCookieの存在を定期的に確認できます...
ファイルを「1回だけ」ダウンロードできることが重要なのはなぜですか?ファイルがダウンロードされると、それはコピーされる可能性があるので、同じユーザーにファイルを複数回ダウンロードさせることには本当にセキュリティ上の問題がありますか?
そうでなければ、あなたはこのようなことをすることができます:
最終結果は次のとおりです。
本当に心配な場合は、各ダウンロード要求をログに記録し、複数回ダウンロードされたファイルのスケジュールされたレポートを実行してください。何か怪しいと思われる場合は、セキュリティログを調べたり、ユーザーと話したりすることができます。