簡體   English   中英

ASP.net設計問題,如果在HTTPS上則強制重定向到HTTP

[英]ASP.net design problem, forcing redirect to HTTP if on HTTPS

在我的主頁上,我具有以下功能:

/// <summary>
/// Forces user to use unsecure HTTP connection
/// </summary>
public void FoceUnsecure()
{
    SSLHTTPDirect(false);
}

/// <summary>
/// Forces user to redirect to SSL
/// </summary>
public void ForceSSL()
{
    SSLHTTPDirect(true);
}

/// <summary>
/// Perform the redirect to self
/// </summary>
/// <param name="SSLRequired">True = Force HTTPS, False = Force HTTP</param>
private void SSLHTTPDirect(bool SSLRequired)
{
    if (int.Parse(ConfigurationManager.AppSettings["UseSSL"].ToString()) == 1)
    {
        bool IsOnSSL = HttpContext.Current.Request.Url.Scheme.ToLower() == "https";
        if (SSLRequired && !IsOnSSL)
            Response.Redirect(ConfigurationManager.AppSettings["SecureDomainRoot"] + "" + Request.RawUrl);
        else if (!SSLRequired && IsOnSSL)
            Response.Redirect(ConfigurationManager.AppSettings["MasterDomainRoot"] + "" + Request.RawUrl);
    }
}

在需要SSL的頁面上,它可以正常工作。 我只做Master.ForceSSL() ,如果它們在HTTP上,它將重定向到安全連接。

問題是,如果所有其他頁面都位於HTTPS上,我想將它們重定向到HTTP,而不必手動瀏覽所有將函數調用添加到ForceUnsecure()

無論我嘗試什么,如果已調用ForceSSL()函數(使用標志等),我似乎都無法從母版頁中解決。 理想情況下,我想要類似

if(!SSLRequired && OnHTTPS){ForceUnsecure()}

但是,無論我嘗試使用什么母版頁,似乎在內容頁調用ForceSSL()之前都會執行所有檢查。 因此,我永遠無法知道內容頁面所設置的值。

為了回應評論,我將其變成一個答案:

我知道這不是您問題的直接答案; 但是,可以說,我對此感到非常強烈,可以坐上肥皂盒。


首先,如果您所擁有的足夠敏感,需要用戶名和密碼,那么您不應該通過在初始登錄過程后通過強制關閉SSL來發送未加密的會話cookie數據來壓制用戶。

對於大多數站點而言 ,與一個或多個帳戶被劫持時失去信任相比,所需的額外帶寬和/或處理能力微不足道。 只有您可以決定關閉ssl是否值得。

如果您認為性能問題可能勝過您的商業聲譽,請對您的應用程序使用標准配置工具,以准確了解其影響。 這些工具包括一個像YSlow這樣的現成工具,以及像Visual Studio高端版本中包含的那些“真正”現成的工具。

值得鏈接:
(討論SSL的性能影響)
SSL施加了多少開銷?
HTTP vs HTTPS性能

(討論為什么登錄后關閉SSL是個壞主意)
http://codebutler.com/firesheep
http://codebutler.com/firesheep-a-week-later-idiot-shepherds
http://codebutler.com/firesheep-three-weeks-later-fallout

(堆棧溢出對其安全性-或缺乏安全性) https://meta.stackexchange.com/questions/69171/why-doesnt-the-stack-overflow-team-fix-the-firesheep-style-cookie-theft

綜上所述,應考慮特殊情況。 也就是說,如果攻擊者在您的站點上攔截並冒充用戶,那么潛在的下降趨勢是什么? 如果是零或接近於零消極方面則關閉SSL 可能是正確的。 即使那樣,如果不這樣做的代價超出了我的承受能力,我只會考慮走這條路。

Matt Sollars創建了一個模塊,而不是在您的代碼中執行此操作,該模塊使您可以使用web.config來指定哪些頁面需要SSL,哪些頁面不需要SSL。 該庫,文章和代碼可從http://www.codeproject.com/KB/web-security/WebPageSecurity_v2.aspx獲得

您可能想看一下HttpModule類。 這些可讓您攔截請求,並且某人已按照您嘗試做的事情做了一些事情。

到目前為止尚未解決的另一方面是對SEO的影響。 如果您有兩個以http和https格式鏈接的頁面版本,則這可能會導致Google中出現重復的內容問題。 在這種情況下,您應該使用301重定向到頁面的相應協議版本。 因此,如果您的登錄頁面是https:// mysite / login,那么如果您使用http:// mysite / login到https版本,則應該執行301重定向。 同樣,如果要從安全URL鏈接回站點的主頁,則應使用主頁URL的非安全版本,因為這是最有可能在搜索引擎中建立索引的版本。 如果無法做到這一點,則可以在頁面中使用規范標記來告訴搜索引擎該頁面的首選格式是http或https-其效果比301重定向的效果小,但總比沒有好。

有關更多信息,請參見此鏈接: http : //www.mattcutts.com/blog/seo-advice-url-canonicalization/

暫無
暫無

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

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