2012-01-05 17 views
2

私は数日前からこの問題に取り組んできましたが、原因を突き止めることができませんでした。クエリ文字列が破損しています:IISによって "80"が削除されていますか?

私は、登録が必要な登録システムを持っています。アクティベーションリンクをクリックすると、サーバーに戻されるハッシュで電子メールがユーザーに送信されます。かなり基本的なもの。

http://site/activate.aspx?activationKey=26a51d9eba86c73b8f7e800c41bf55453ed3b1c4

(VS2010を実行している)私のローカルマシン上で開発しているが、これは完璧に動作します:リンクは次のようになります。ただし、サイトがライブサーバー(IIS 6)にプッシュされると、おそらくIISによってクエリ文字列がマングリングされています。クエリ文字列がコードビハインドにヒットすると、「80」の出現が取り除かれ、アクティベーションが失敗します。

私はこれがエンコード/デコードの問題かどうか疑問に思っていますが、文字は特別なものはありませんので、そうはならないと思います。

+4

管理者または管理者でなければならないと思った人が「書き換え」を行っていますか? (おそらく、ポート番号を削除する間違った試行で...)間にプロキシサーバーはありますか?完全なリクエストがログに記録されていることをIISは何を示していますか? "80"がパス自体(クエリ文字列ではない)の一部である場合はどうなりますか?あなたはどこかでクエリ文字列を掘り下げていないと確信していますか?忘れられたハンドラー?説明されているように壊れる「標準」はありません。 –

+1

VS2010が提供するWebサーバーでテストするのではなく、IIS自体を試してみてください。そして、デバッグのために、w3wp.exeに添付してください。 –

+0

ちょうどIISログを掘り下げました。あなたは何かに乗っている。 ここでも、ここで元のクエリです: 'Activate.aspx activationKey = 26a51d9eba86c73b8f7e800c41bf55453ed3b1c4' そして、それはのようにIISログに現れています:?' Activate.aspx ?activationKey = 26a51d9eba86c73b8f7e0c41bf55453ed3b1c4' 「80」がなくなったことに注目してください。さて、私がLinuxの人であることを考えると(IISは私にとっては外国人です)、そのようなログに表示されていれば、それはIISに変わっていますか?言い換えれば、IISのいくつかの設定はこれを引き起こすものではありません。 – Matthew

答えて

1

まあ、問題が見つかりました。 @pstと@Mikael Eliassonは正しかった、ある意味ではいくつかの書き換えルールがある場所にある。

このサイトは、HTTPSを使用するようにURLを書き換える別の(既存の)アプリケーションに403; 4エラーをリダイレクトすることでSSLに強制されます。ある意味では、アプリにSSLを強制することができ、残りは(壊れた)魔法です。元のコードは次のとおりです。

if (Request.ServerVariables[ "SERVER_PORT" ] == "80") { 
    try { 
     string queryString, secureURL; 

     queryString = Request.Url.AbsoluteUri.ToString(); 
     queryString = Request.ServerVariables[ "QUERY_STRING" ]; 
     Response.Write(queryString + "<br>"); 

     secureURL = queryString.Replace("http", "https"); 
     secureURL = secureURL.Replace("403;", ""); 
     secureURL = secureURL.Replace("80", ""); 

     Response.Write(secureURL); 
     Response.Redirect(secureURL); 
    } 
    catch (Exception ex) { 
    } 
} 

「80」の残虐な置換に注意してください。その置換えを ":80"に変更すると、 ":80"という文字列を渡さないと仮定して問題を修正します。

少なくとも私を正しい方向に向けてくれてありがとう、みんな。

1

ウェブサイトでtrace.axdをオンにして、どの値が送信されているかを確認してください。メールクライアントが何もしていないと確信していますか?

+0

確かに。私は複数の場所(複数のブラウザ、OutlookのGmail、URLをアドレスバーに直接貼り付ける)から試しました。私の開発マシンではまだ完全に動作しているので、プロダクションサーバー上に何かがなければならないと思っています。 – Matthew

2

IISがデフォルトでクエリ文字列から80を削除しないという事実はわかっています。私は何の問題もなく何度も私のサイトにクエリーストリングでそれを持っていました。

IISでURL書き換えルールを調べます。 IISログがIISの前に最終的なURLまたはURLを使用するかどうかはわかりません。しかし、それは80だと思いますが、誰かがポート80をURLから削除したいと思っていますが、このために書き換えルールに誤りがあります。

だから、誰かがURLからポート80を剥がそうとする可能性のある場所を探します。 IISまたはアップストリームに存在する可能性があります。

関連する問題