.NET TIPS [ASP.NET]途中ページへの直接アクセスを防ぐには?山田 祥寛2004/06/25 |
|
|
別稿「TIPS:[ASP.NET]フォーム認証後に強制的に先頭ページへ誘導するには?」では、フォーム認証時に、ユーザーを先頭ページに誘導する方法について紹介した。しかし、この方法は(当然のことながら)フォーム認証を利用する場合にしか利用できない。また、あくまで認証時のリンク先を制御するだけなので、いったん認証を通過してしまった後は、ユーザーがどのページにアクセスするのも自由になってしまう。
では、フォーム認証を必要としないページ(あるいは認証後のページ・アクセス)で同様の制御を実現するには、どのようにしたらよいだろうか。そこで本稿では、Global.asaxを利用して、ユーザーによる途中ページへの直接アクセスを防ぐ方法について紹介することにしよう。この方法は、Webアプリケーションの途中ページに付けたブックマーク(お気に入りに追加)などによって想定されていないページがアクセスされた場合に、それを先頭ページへリダイレクトする。
なお、Global.asaxに関する詳細は、別稿「TIPS:[ASP.NET]アプリケーション共通のロギングを行うには?(Global.asax編)」でも紹介しているので、併せて参照してみてほしい。
まず、今回紹介する方法を利用したサンプル・プログラムを示す。
|
|
ユーザーによる途中ページへの直接アクセスを制御するGlobal.asax(VB.NET版) |
|
|
ユーザーによる途中ページへの直接アクセスを制御するGlobal.asax(C#版) |
コードの流れは単純だ。ユーザーが直接にサイトへアクセスしてきたかどうかを確認するには、HttpRequest.UrlRefererプロパティを利用すればよい。UrlRefererプロパティは、カレント・ページへのリンク元のURLを返す。つまり、UrlRefererプロパティが空文字列(当該ページに直接にアクセスしてきた)、あるいは、現在のアプリケーション・パスとは異なるURLを返した(偽造されたダミーのページからリンクされた)場合には、本来、アプリケーションが想定していたリンクとは異なるものと見なして、強制的に先頭ページ(今回の場合ではindex.aspx)へリダイレクトする。これによって、ユーザーによる途中ページへの直接アクセスを防ぐことができる。
ただし、この方法も絶対的な信頼がおけるというわけではない点に注意してほしい。というのも、UrlRefererプロパティはクライアントがリクエスト時にセットしてきたリクエスト・ヘッダの内容を取得しているにすぎない。つまり、クライアント側で作為的にリクエスト・ヘッダを偽造していたら、これを防ぐ手段はないということだ。
本稿で紹介した手法は、あくまで一時的なガードの手段であって(ほとんどのケースでは十分なガードであるにせよ)、絶対的なものではない点に注意すること。もしもリクエスト・ヘッダを改ざんするようなケースまでも防ごうとした場合には、セッション情報にアプリケーションの状態を管理するためのフラグを持たせるなどの施策が必要となる。
カテゴリ:Webフォーム 処理対象:認証 関連TIPS:[ASP.NET]フォーム認証後に強制的に先頭ページへ誘導するには? 関連TIPS:[ASP.NET]アプリケーション共通のロギングを行うには?(Global.asax編) |
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|