- PR -

ジャンプ元URLの取得方法について

1
投稿者投稿内容
へちま
会議室デビュー日: 2004/01/22
投稿数: 10
投稿日時: 2004-01-26 21:29
こんにちわ!

ジャンプ元URLの取得方法について質問です。

あるサイト(SSL)からジャンプしてきた場合のみ別の処理をさせたいのですが
Response.UrlReferrerがnullになってしまい取得できません。
ちなみにhttpサイトからのジャンプの場合は取得できます。
また、取得する側はASP.NETでSSLは使用しない環境です。

UrlReferrerを利用しない方法でも何でも情報をお持ちの方
是非教えてください。よろしくお願いします。
へちま
会議室デビュー日: 2004/01/22
投稿数: 10
投稿日時: 2004-01-27 09:45
本人追記ですw

Response.Redirectやリンクからの遷移の場合は
SSLでも遷移元アドレスを取得できるようです。
ただし、Formタグのsubmitで遷移した場合は取得できません。

SSLサイトのFormタグのsubmitで遷移されてきた場合
遷移元アドレスを取得する良い方法は無いでしょうか?
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-01-27 10:05
ここを見てください。
http://www.studyinghttp.net/request.html#Referer

Refererヘッダを送っているのはクライアント(ブラウザ)です。
「私はここから来ましたよ」という情報をサーバーに知らせるわけです。
そして始めに示したリンク先に、「クライアントがセキュリティ上の観点から、送るべきではないと判断した場合には送らなくてもかまいません」と書いてあります。
SSLを使ってアクセスしたサイトなので、おそらくクライアントがRefererヘッダを送っていないのではないでしょうか。


と思ったらへちまさんの2度目の書き込みが・・・

>Response.Redirectやリンクからの遷移の場合はSSLでも遷移元アドレスを取得できるようです。

「Redirectやリンク」と「ジャンプ」というのは何が違いますか。
ジャンプというのは具体的にどういう動作です?
「Javascriptで新しいウィンドウ」とかだったらおそらくRefererは送りません。

----------------
あと、
Response.UrlReferrer
ではなくて
Request.UrlReferrer
ではないですか?

[ メッセージ編集済み 編集者: 一郎 編集日時 2004-01-27 10:06 ]
へちま
会議室デビュー日: 2004/01/22
投稿数: 10
投稿日時: 2004-01-27 10:55
まったく一朗さんの言うとおりですw
最初は「ジャンプ」=「全ての遷移行動」と思ってたのですが
場合によって挙動が違うことが分かってきました。

自分なりにまとめた結果です。
クライアントはIE6SP1の場合

HTTP →(リンク・フォームのサブミット)→HTTP  ・・・ UrlReferrer有り
HTTP →(リンク・フォームのサブミット)→HTTPS ・・・ UrlReferrer有り
HTTPS→(リンク・フォームのサブミット)→HTTPS ・・・ UrlReferrer有り
HTTPS→(リンク)           →HTTP  ・・・ UrlReferrer有り
HTTPS→(フォームのサブミット)    →HTTP  ・・・ UrlReferrer無し

の用です。困った仕様ですw
UrlReferrer以外に遷移元URLを取得する方法は無い物でしょうか?
HTTPS→(フォームのサブミット)→HTTP
不運にもこれがやりたいわけです。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-01-27 11:48
「フォームのサブミット」というのはRedirect()等で別のページを表示しているということですよね。
SSL上で見るページAと、普通のページBがあったとして、
ブラウザにAを表示 -> ブラウザがAにポストバック -> Aのサーバー側プログラム内でRedirect(B) -> Bのサーバー側プログラムの中でRefererにより処理を分ける
ということなら、Refererヘッダを渡す渡さないはASP.NET内部の仕様の問題ですので、ユーザーはいじることはできないと思います。

いっそのこと、参照元を引数で渡したらどうでしょう。
URLの?の後に以下のように付けて
http://www.aaaaaaa.co.jp/BBB/CCC.aspx?Referer=xxxx.aspx
ヘッダに情報があればそれを使い、なければ引数のRefererを見るとか。
あまりスマートでない気もしますが。

-------
やばい、適当にURL書いたら実際にあるサーバーだった。
変えました。

[ メッセージ編集済み 編集者: 一郎 編集日時 2004-01-27 11:51 ]
へちま
会議室デビュー日: 2004/01/22
投稿数: 10
投稿日時: 2004-01-27 12:14
すばやい返信有難うございます!
GETやPOSTで送信するのは面白くないですが、そう言う方法しかないようですね。

それから、私の「フォームのサブミット」と言う言葉が
曖昧な表現で申し訳ありませんでした。
正確には

<form method="post" action="http://aaaaa.com/bbbbb.aspx">
<input type="hidden" name="usercd" value="00005">
<input type="submit" value="Login">
</form>

こう言うフォームから送信した場合と言う意味でした。
これはサーバーサイドの問題ではなくクライアントがUrlReferrerを付加するかどうか
何ですよね?このときIEは
HTTPS→HTTP
ではUrlReferrerを付加しないようです。

ただし
HTTP→HTTP
HTTP→HTTPS
HTTPS→HTTPS
の場合ではUrlReferrerを付加される仕様のようです。
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-01-27 13:11
あ、なるほど。
ブラウザから直接ってことですね。

その状態なら、確かにRefererを送るか送らないかを決めているのはブラウザ(IE)ですね。
送られてこない情報はどうしようもないので、引数等で自分で送る以外に方法はないと思います。
<input type="hidden">とかで送るのがいいかも。
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-01-27 23:55
引用:

へちまさんの書き込み (2004-01-27 10:55) より:
HTTP →(リンク・フォームのサブミット)→HTTP  ・・・ UrlReferrer有り
HTTP →(リンク・フォームのサブミット)→HTTPS ・・・ UrlReferrer有り
HTTPS→(リンク・フォームのサブミット)→HTTPS ・・・ UrlReferrer有り
HTTPS→(リンク)           →HTTP  ・・・ UrlReferrer有り
HTTPS→(フォームのサブミット)    →HTTP  ・・・ UrlReferrer無し

の用です。困った仕様ですw


とのことですが、この場合にReferrerを送ってしまうと、SSLで接続した際にリクエストで送ったURLの内容が、非SSLのサーバから読み取れてしまうため、セキュリティ上問題になる可能性があるわけです。
# HTTPSサイトへのリクエストの内容が、HTTPのサイトへ送られてしまう。
1

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