- PR -

[ASP.net]ページ制御

投稿者投稿内容
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2005-04-06 18:18

みなさん、こんばんは。
現在、C#でwebアプリの開発をしています。

今、以下のようなソースをGlobal.asaxに記述し、
ログインページ以外のページを直接URLを入力して
表示できないように制御しています。

protected void Application_BeginRequest(Object sender, EventArgs e)
{
int CurrentPath = Request.RawUrl.IndexOf("login.aspx");
//リンク元
if(CurrentPath==-1)
{
string RequestPage = Request.ServerVariables["HTTP_REFERER"];
if(RequestPage==null)
{
Response.Redirect("login.aspx");
}
}
}

今、あるページAからjavascriptのwindow.openを使用し、
検索用のページBを新規ウィンドウで開こうと思っています。
しかし、上記の処理を行なっているため、
ページBには必ずログインページが開かれてしまいます。

どうにかしてページBを新規ウィンドウで開くことができないでしょうか。
もちろん、ページBも直接URLを入力されることを防ぎたいです。

どなたかご教授よろしくお願いします。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-04-07 07:00
window.openした場合でもSessionの情報は引き継げたはずなので、HTTP_REFERERでの判断をやめ、Session変数にフラグをもたせればよいかと思います。

でも本当に確認したいのはトップページからリンクをたどったか否かでは無く、ログイン画面での認証をクリアしたか否かじゃないんですか?もしHTTP_REFERERを詐称してアクセスされたらどうします?認証に関する情報はSessionか何かに格納しているのではないですか?それを使ってチェックした方が良いと思うけど・・・。

それにHTTP_REFERERはセキュリティソフトが削除してしまうことが多いです。これに限らずHTTP_REFFERを使って判断するのは避けた方が良いと思う。
Access
ぬし
会議室デビュー日: 2002/04/08
投稿数: 829
投稿日時: 2005-04-07 07:52
引用:

今、以下のようなソースをGlobal.asaxに記述し、
ログインページ以外のページを直接URLを入力して
表示できないように制御しています。


ASP.NETのフォーム認証機能を利用すると解決できると思いますけど。
Global.asaxの処理をフォーム認証に切り替えることを検討してみたらどうでしょうか。
_________________
ASP.NET+Ajaxサンプル集 | JavaScript+Ajaxサンプル集
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2005-04-07 10:23
甕星さん、Accessさん、
回答ありがとうございます。

現在、私が作っているのは、
部内のハードウェア管理をする小さなプログラムでして、
納期もそれほどないため、
これからフォーム認証に変更することは避けたいのですが。。。

やはり、今のGlobal.asaxを使用した方法をどうにかして残し、
何か別な方法を追加する形で解決はできないでしょうか。。。

ご教授よろしくお願いします。
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2005-04-07 10:37
引用:

やはり、今のGlobal.asaxを使用した方法をどうにかして残し、
何か別な方法を追加する形で解決はできないでしょうか。。。


甕星さんの書かれている
引用:

Session変数にフラグをもたせればよいかと思います。


ではだめでしたか?

フォーム認証はそんなに大変ではないです。いまだに解決できないなら、検討する価値はありますよ。
http://www.atmarkit.co.jp/fdotnet/aspnet/aspnet19/aspnet19_01.html


_________________
たつごろー
codeseek
こみゅぷらす
ジョン吉
常連さん
会議室デビュー日: 2005/02/25
投稿数: 33
投稿日時: 2005-04-07 10:47
どのくらい認証処理が必要なのかは解りませんが、
フォーム認証自体はそんなに難しくないですし、実装もさほど苦にならないですよ。
日経BP社から出版されている
「.NetエンタープライズWebアプリケーション開発技術大全Vol4」に詳しい解説とコードが記載されています。
@ITの読み物の中にもフォーム認証の記事があったと思います。

私は、上記書籍を参考に1日ぐらいで実装できましたよ。
色々、技を駆使して実装するより、既に用意されている機能を使用した方が簡単に実現できたりします。

多分、この掲示板ではhanaさんが担当しているシステムの要件を皆さん知らないので、
期待に添うようなアイデアを出してもらうには
時間がかかると思います。
それより、フォーム認証を勉強されてはいかがですか?
私の感想では優れものだと思いますよ⇒フォーム認証
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2005-04-07 13:49
引用:
hanaさんの書き込み (2005-04-07 10:23) より:

部内のハードウェア管理をする小さなプログラムでして、
納期もそれほどないため、
これからフォーム認証に変更することは避けたいのですが。。。

やはり、今のGlobal.asaxを使用した方法をどうにかして残し、
何か別な方法を追加する形で解決はできないでしょうか。。。

手軽な変更で済ませることを最優先したいということですね。
window.openは必須ですか?たとえば
<a href="〜" target="新しい名前">
とすればREFERERは入りますよ。

とはいえ「HTTP_REFFERを使って判断するのは避けた方が良いと思う。」これは同感です。


[ メッセージ編集済み 編集者: べる 編集日時 2005-04-07 13:50 ]
hana
ベテラン
会議室デビュー日: 2003/02/08
投稿数: 70
投稿日時: 2005-04-21 12:46
返信が遅れましてすみません。

その後、HTTP_REFFERでの判断をやめ、
認証情報をSession変数で保持していますので、
それで判断するように変更しました。

しかし、ログインページ以外のページを直接URLで指定し
アクセスすると、ごくまれですが、
ログインページにリダイレクトされず、
そのままそのページにアクセスできてしまうという
現象が起こります。

再現性があまりないため、原因がよくわかりません。
どなたかご教授頂けると嬉しいです。
宜しくお願いします。

スキルアップ/キャリアアップ(JOB@IT)