簡體   English   中英

損壞的查詢字符串:“ 80”被IIS刪除了嗎?

[英]Corrupt Query String: “80” being removed by IIS?

我已經為這個問題解決了幾天,似乎無法弄清楚是什么原因造成的。

我有一個需要激活的注冊系統。 當用戶單擊激活鏈接時,會將帶有哈希值的電子郵件發送給用戶,該哈希值將被傳遞回服務器。 很基本的東西。 鏈接看起來像這樣:

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

在我的本地計算機(運行VS2010)上進行開發時,這可以完美工作。 但是,將站點推送到實時服務器(IIS 6)時,查詢字符串可能被IIS破壞了。 一旦查詢字符串命中了后面的代碼,任何出現的“ 80”都將被刪除,從而導致激活失敗。

我想知道這是否是編碼/解碼問題,但是所有字符都不是特殊字符,因此我認為情況並非如此。

我知道,IIS默認情況下不會從查詢字符串中刪除80。 我在我的網站上多次在查詢字符串中使用它,沒有任何問題。

在IIS中查找url重寫規則。 我不確定IIS日志是使用最終URL還是使用IIS之前的URL。 但是考慮到它是80,我想有人想從URL中刪除端口80,但是為此添加了錯誤的重寫規則。

因此,我要尋找一個地方,有人可能試圖從網址中剝離端口80。 可以在IIS或上游。

打開網站上的trace.axd並檢查正在發送的值。 您確定電子郵件客戶端未執行任何操作

好吧,我發現了問題。 @pst和@Mikael Eliasson是正確的,從某種意義上說,某些goon確實有一些重寫規則。

通過將403; 4錯誤重定向到另一個(現有的)應用程序,該應用程序將URL重寫為使用HTTPS,從而迫使該網站進入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”可解決此問題。

伙計們,至少感謝您為我指明了正確的方向。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM