2012-01-31 13 views
9

多くの技術者以外のユーザーが使用する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

答えて

1

おそらくクッキー?サイトがfile:\\で実行されている場合は、リクエスト内にクッキーが存在しない可能性があります。 (もちろん、ログインページにいくつかのクッキー(セッションデータ)を追加する必要があります。

また、CSRF http://en.wikipedia.org/wiki/Cross-site_request_forgeryとその防止方法についてもお読みください。

+1

本当に、保存されたコピーにクッキーはありません。だから私は、ログインフォーム上のクッキーを設定し、ログイン後、その存在を確認することができますメニューページ、素敵な! –

+0

ログインページからログインハンドラに送信された時間依存のCSRFトークンを使用することをお勧めしますか?私は、CSRFの保護のように、私のアプリケーションから来なかった要求を検出しようとしているので、おそらくこれもうまくいくでしょう。私はあなたの提案を試して、報告します。 –

1

おそらく、サーバー側でのHTTPリファラをチェックし、ホストされたログインフォームから来ていないユーザーに警告できます。

編集:

は実際に、漠然と同様の質問が前に尋ねたとリファラが理想的なソリューションではありませんし、また、代替ソリューションを提供し、なぜ良い説明を持ってきた:あなたがリダイレクトする代わりに、メッセージのHow to check if a request if coming from the same server or different server?

+0

これは理想的なソリューションのようでしたが、IEとChrome(私がテストしたもの)はfile://からhttp:// –

+1

に行くときにリファラーを送信しないようですユーザーがブラウザのデフォルトの動作を変更しない限り、空のリファラーを含むリクエストがログインフォームから来ていないと想定するのは安全でしょうか?あなたの迷惑行為を心配している場合は、その影響を理解したことを確認した後で、一度も何度も警告することはできません。 – Till

+0

リファラがないことを確認するとよいでしょう(しかし、ログインしたユーザーがURLを入力したなどの誤認を引き起こす可能性もあります)、残念ながら私はこれまでのリファラーヘッダーで問題を抱えていますアプリケーション - 多くのユーザーが企業ファイアウォールの背後に座っているため、リファラヘッダーはセキュリティ対策として使用されます。私がこれを理解しなければ、私はあなたの答えを受け入れるでしょう –

0

あなたのユーザーをログインフォームを持つ実際のページに移動するか、またはそのような方法でページを保存する必要があることを説明するヘルプボックスを表示します。

2

実際のファイルを保存するのではなく、ブックマークを使用するようにユーザーに教えることが最善の策だと思います。それ以外

は、おそらく、おそらくログオン時に、代わりにあなたのURLへのショートカットを作成する方法がありますか?

+0

それは良いアイデアだ、私は(おそらくJavaScriptを使用して) 'ブックマークの追加'リンクを持っているサイトを見てきました。私はおそらくこれを実装しますが、この時点で、すでにこれを行っている既存のユーザに警告する必要があります。 –

1

なぜアラートの代わりにページにリダイレクトするのですか?

window.location = 'http://www.yourdomain.com' 

またはあなたはまた、あなたは、フォームの隠し変数として設定されたセッション変数を設定することができwindow.location.reload();

+0

この質問は、HTMLページがすでにクライアントによって保存されているため、変更できないことを示しています。私はローカルに保存されたコピーを介してどのユーザーが視力にアクセスしているのかを検出することを望んでいました。また、file:// pageを再ロードすると、ローカルコピーがリロードされます –

0

とリロードを強制することができます。それがない場合は、ログインフォームにリダイレクトします。

関連する問題