多くの技術者以外のユーザーが使用するWebアプリケーションがあります。私は、これらのユーザーのうちのいくつかは、デスクトップにアプリケーションのログインページを保存していることを発見しました(関連するCSSファイルとJSファイルも保存されます)。その後、アプリケーションの使用を開始するには、file://プロトコルを使用してローカルコピーを示すデスクトップアイコンをダブルクリックします。ローカルに保存されたHtmlログインページからユーザーがWebアプリケーションにアクセスできないようにするにはどうすればよいですか?
これは、後で問題を引き起こす可能性があります。私がログインフォームやそれが投稿するURLなどを変更した場合などです。また、特定のjavascriptユーティリティ、 PIE.htcはfile://プロトコルを使用して動作しません。
明らかに、彼らは、ブラウザのブックマーク/お気に入りを保存しているやるべきものを、私は残りの部分を混乱させずにそれらのユーザーを検出し、警告の方法を探しています。
if (top.location.protocol == 'file:') {
alert('This application is not designed to be accessed from a desktop copy...')
}
をしかし、私はジャバスクリプトのこの部分を追加したので、これが唯一のデスクトップのコピーを保存しているユーザーに警告します:私は、これらのユーザーに警告するために、いくつかのJavaScriptを使用してきました。
は、誰がこの問題を持っていたし、彼らが共有したい巧妙な解決策を打ち出していますか?
おかげ
更新:
は最後に、私は、ログインページの要求時に一回だけの値でクッキーを設定し、フォームで隠しフィールドと同じ値を格納することで、これを行うことを決めました。次に、フォーム送信ハンドラで、2つが同じであることを確認し、そうでない場合はエラーメッセージを表示します。 nonceをクッキーの代わりにセッションに保存することもできますが、不要なセッションを作成したくありません。
、ユーザがローカルにログインページを保存している場合は(彼らはすべてのクッキーを持っている場合)、彼らはおそらく、クッキーに比べて保存したフォームで異なるノンス値を持つことになります。
通常1は、ログインフォームに(つまり、これが何であるかのようなものだ)CSRF保護を追加しないだろうが、それは私の要件を満たしています。このテクニックについてはThe Registerのhttp://www.theregister.co.uk/2009/10/02/google_web_attack_protection/で、Googleはログインフォームの同様の保護を実装して、ログイン要求の偽造に対して保護しました。http://en.wikipedia.org/wiki/Cross-site_request_forgery#Forging_login_requests
本当に、保存されたコピーにクッキーはありません。だから私は、ログインフォーム上のクッキーを設定し、ログイン後、その存在を確認することができますメニューページ、素敵な! –
ログインページからログインハンドラに送信された時間依存のCSRFトークンを使用することをお勧めしますか?私は、CSRFの保護のように、私のアプリケーションから来なかった要求を検出しようとしているので、おそらくこれもうまくいくでしょう。私はあなたの提案を試して、報告します。 –