none
IIS設定によるURL直接指定の禁止 RRS feed

  • 質問

  •  

    妙な質問で恐縮ですが、IISの設定でブラウザ側のURLを直接入力した場合は

    サイトの閲覧を拒否させることは可能でしょうか。

     

    当方の環境は以下の通りです。

    os:Windows2003

    iis:6.0

    .NetFramework:1.1

    DB:SQLServer2000

     

    Webアプリケーションの保守を行なっているのですが、

    ユーザーが規定の入り口以外で、ブラウザから直接URLを指定されることで

    想定している以外のAspxが呼び出され異常終了しゅる事態が発生しています。

     

    アプリケーションの入り口を制限し、アプリケーションからのリダイレクトなり呼び出しの

    時のみサイトを表示させるには、如何すれば宜しいでしょうか。

     

    何方が解決法を御存知でしたら、御教示頂きたく存じます。

     

    宜しく御願いします。

     

    2007年7月2日 9:32

すべての返信

  • よくあるのはセッション情報あたりに何かデータを持つようにして、規定のデータを持っていない場合はリダイレクトさせる、といった方法でしょうか。

    この場合、すべてのページに手を入れる必要がでてきますけどね。

     

    2007年7月2日 9:52
  • Session_Startイベントで、入り口の.aspxかどうか判断する方法も取れると思います。
    2007年7月2日 23:18
    モデレータ
  •    trapemiya さんの方法(global.asax)だと
    1. 有効なセッションを獲得
    2. その後任意のタイミングでURL入力
    とした場合、Session_Startではじくことができないので
    注意が必要です。

    指定されたページを表示してよい条件を見直してみたほうが良いかもしれません
    例:権限、データ入力が完了している...など
    2007年7月3日 2:20
  • 入り口ページをログインページとしたフォーム認証ではどうです?
    2007年7月3日 3:45
  • フォーム認証でもNGだと考えます。

     

    ディープリンク(直接URL参照)に関しては

    結局のところプログラムのつくりによるところが大きいと思います。

     

    たとえばセミナーの申し込みサイトで申し込みの最終確認画面をブックマークにとってから

    申し込みを完了させた場合、そのユーザが保存したブックマークから申し込みページを表示させた場合

    「このセミナーには既に登録されています」等のメッセージを出し重複した申請ができないような

    つくりである必要があると思います。

     

    つまりフォーム認証などの認証済みユーザがブックマークからディープリンクをたどった場合に

    適切なエラーメッセージが表示されるかどうかは確認の必要があると思います。

     

     

    言葉たらずの点があればご指摘ください。

    2007年7月3日 4:31
  • ブックマークから直接入ってきた場合は認証済みユーザとならないために、認証チケットを永続化しないようにしてはどうでしょうか。

    「申し込み最終画面に遷移する前には、ページ1とページ2を遷移している事」というような要件ならば、プログラムによる作り込みが必要かと思いますが、今回のように「直接URL参照されたら、入り口ページへとにかく入る事」(この解釈で合ってますよね?)だとフォーム認証でいけるかな、と思います。

    2007年7月3日 4:57
  • ここはブラウザの挙動になりますが

     

    認証済みユーザがブックマークを利用してGETリクエストを行った場合

    認証チケットが無効になるようであれば問題ないのですが、

    この場合、認証済みユーザのリクエストとみなされる様な気がします。

     

    例:http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet19/aspnet19_01.html の例によると

    1. default.aspxにリクエストするとlogin.aspxに誘導される
    2. アカウントを入力し認証情報を「記憶せずに」ログインする
    3. default.aspxが表示されるのでここをブックマーク
    4. 「管理ページ」ボタンを押し、管理用ページadmin.aspxを表示する
    5. ここで先ほど保存したブックマークによるアクセスを行う(またはURLでdefault.aspxへ移動する)
    6. 「フォーム認証済みユーザ」であるためdefault.aspxページが表示できる
    7. ブラウザを閉じ、再度ブラウザを立ち上げて先ほどのブックマークによるアクセスを行うと1.と同じ挙動

    この手順6.の挙動が問題なければフォーム認証でいいと思います。

     

    ポイントは「未認証ユーザが直接URL参照されたら、入り口ページへとにかく入る事」(この解釈で合ってます?)

     

    考えすぎかもしれませんが。

     

    参考までに:リファラチェックを行うHTTPModuleを作った人も居るようです

    http://www.irritatedvowel.com/Programming/DeepLinkingHttpModule.aspx

    2007年7月3日 6:05
  • まとめると、今回の問題でこうしたら良いと私が思っている方法は

    1. ユーザが直接URL参照で入り口ページ以外のページを参照する。
    2. 1 のユーザは認証されていないので、入り口ページへ遷移する。
    3. 入り口ページでは無条件に認証させる(ユーザに認証情報を入力させる必要なし)。
    4. 3 を経ているので、他のページへ遷移できる。

    とにかく、一度入り口ページに入りたいと読み取れましたので、これで十分かなと思います。

    Moo さんの手順6についても、同じセッションであればOKというのであればフォーム認証でOKです。ダメなら他の方法を考えないといけません。

    ただ、ASP.NET の認証なので、.html などの静的ページも含みたいなら、IIS の isapi の構成を変更してください。


    >参考までに:リファラチェックを行うHTTPModuleを作った人も居るようです

    リファラチェックだと、正当な遷移をしている人が弾かれる場合(変なセキュリティ系ソフトがリファラを隠す)があるので個人的にはどうかと思います。

    2007年7月3日 7:05