2016-05-11 18 views
3

私が取り組んでいるアプリケーションは、多くのポップアップに頼っています。これらのポップアップは、クエリ文字列に依存しています。誰かがブラウザのアドレスバーにURLを入力するだけであれば、クエリ文字列の値が動的に構築されるため、ページにエラーが発生します。Javascriptで開くのではなく、直接ポップアップを開くのを防ぐことはできますか?

function myFunction(id) 
{ 
    window.open("mypopup.aspx?id=" + id); 
} 

ページの要求者はJavascriptでない場合は、なぜ表示からページを防ぐためにありますか?誰かが次のようなものを入力した場合:

https://mycompanyname.com/path/mypopup.aspx 

このようにしてはいけません。または、リクエスタがjavascriptでないかどうかを少なくともチェックして、メッセージを表示したり、ユーザーを別のページにリダイレクトしたりできますか?そうしないと、リクエストを作成するために必要なデータがすべてない場合、ページは例外をスローします。

ありがとうございます。

+2

実際のポップアップウィンドウはなぜですか?標準的なプラクティスは、CSSおよびJavaScriptフレームワークを介してWebページ自体のコンテキスト内でポップアップを使用することです。例はブートストラップモーダル、jQueryダイアログなどです。 – mason

+0

これは既存のアプリケーションです。私はちょうど作業中です。 – Richard77

+0

ユーザーエクスペリエンスが悪い古い練習問題を修正する機会を得られないのはなぜですか? – mason

答えて

1

myPopup.aspxでクエリ文字列を直接検証します。見つからない場合は、リダイレクトまたはメッセージを表示するだけです。

Request.QueryStringコレクションを使用して、myPopup.aspxで検証します。

私の知る限りでは、要求がjavascriptから来た場合、簡単に検証する方法はありません。送信者があなたが期待しているものであることを検証するためにトークンを作成することができますが、パラメータを検証する必要がある場合は、誰が要求を送信しているか心配する必要はありません。

1

両方のリクエストが同じブラウザから送信された場合、ページは要求された方法を区別できません。

ただし、それらを区別するためにクエリ文字列に含めることができます。例えば

window.open("mypopup.aspx?request=javascript&id=" + id); 

ユーザが意図的にそうそれは、https://mycompanyname.com/path/mypopup.aspx?request=javascriptで入力した場合。私はそれについて心配しません。

+0

ポップアップがJSによって作成されている可能性があるということは、すべてのパラメータが存在することを意味するため、これも答えになる可能性があります。 – Richard77

1

ポップアップもブラウザウィンドウです。したがって、ページを要求しているウィンドウが通常のウィンドウかポップアップかどうかをチェックするのは難しいでしょう。

  1. ポップアップが開いているURLを表示するには、アドレスバーを非表示にすることをユーザーに制限する必要があります。したがって、ユーザーはURL内の内容をコピーしたり知ったりすることはできません。 window.open('/pageaddress.html','winname','directories=no,titlebar=no,toolbar=no,location=no,status=no,menubar=no,scrollbars=no,resizable=no,width=400,height=350');

  2. トークンベースの検証をセットアップします。サーバー(Ajax request)にランダムトークンを取得して(1回の検証メカニズムを使用して期限切れにする)、クエリ文字列にトークンを送信し、発行されたトークンが同じであればサーバー上で検証できます。要求されたページに有効なトークンがあるかどうかを確認する(ポップアップ)。そうでない場合はリクエストを拒否するか、エラーメッセージを表示する。 captchaの仕組みを考えれば、プログラムでそれを行うだけです。

、それはまた、最善の解決策ではないかのようにトークン情報はシオマネキのようなネットワーク・トラフィックの追跡ツールを使って盗聴することができますが、それは手動の要求を防ぐために動作しますです。

+0

セキュリティ上の理由により、新しいブラウザでアドレスバーを非表示にすることはできません。 – Win

関連する問題