ユーザーがどこから来たのかを知る方法は?
-
06-07-2019 - |
質問
ASP.NETアプリケーションでユーザーがどこから来たかを判断する信頼できる方法はありますか? 2つの異なる場所からリンクされているWebアプリケーションがあります。 2つのリンクは別々のドメインにあり、このアプリ内で特定のユーザー権限を指定する必要があります。ここに私がこれまで試したものがあります...
-
Request.UrlReferrer
の使用( Referer HTTPヘッダー)。これは常に空の文字列を返しました。これは、ハイパーリンクがJavascriptを使用してポップアップウィンドウを起動するためだと考えています。私の調査に基づいて、ユーザーエージェントは標準のハイパーリンクでこのHTTPヘッダーを提供します。 Javascriptポップアップは別の話です(明らかに)。 -
リファラーを示す単純なクエリ文字列。バイパスするのがそれほど簡単ではない(より安全な)ものが必要なため、これは実際にはオプションではありません。
アイデアはありますか?物事の大規模なスキームでは、これにより全体的な設計/構造が改善される可能性があることを理解しています。それはオプションではないので、すべてを再設計することを示唆する回答を投稿しないでください。
解決
ユーザーがどこから来たのかを知る信頼できる方法はありません。これはASP.NETの制限であるだけでなく、一般的なすべてのWebアプリケーションです。 URLリファラーは簡単にスプーフィングされる可能性があるため、信頼できません。最適なオプションは、暗号化されたURLパラメーター、または必要に応じてCookieである可能性があると思います。
したがって、両方のページで共通の秘密鍵について合意する必要があります。
- Page1はキーを使用してアドレスを暗号化し、Page2に渡します
- Page2はこのパラメーターの存在を確認し、暗号化に使用したのと同じ秘密キーを使用して暗号化を解除しようとします
- これが成功した場合、Page2が呼び出し元を判断できることを意味します。そうでない場合、データは改ざんされています
他のヒント
ブラウザがリファラーを渡すか、説明したようなクエリ文字列を使用しないと、知る方法がありません。
もう1つのオプションは、ASP.NETアプリケーションに2つの異なるランディングページを設定することです。ランディングページでは、セキュリティオプションを設定してから、共通のホームページにリダイレクトできます。これはquerystringオプションよりも少し安全です。
または、ASP.NETアプリケーションサイトから取得した参照サイトに1x1ピクセルの画像を配置することもできます。リファラーはスクリプトに渡される必要があり、ユーザーのマシンにCookieを設定して、アプリのホームページにアクセスしたときに参照できます。