簡體   English   中英

HttpWebRequest檢查允許的域

[英]HttpWebRequest check for allowed domain

我有一個關於允許用戶僅連接允許的域名的問題。

所以我想到的是:我有一個域名列表,例如* .domain1.com; * .domain2.com等...

然后在代碼中的某個地方,我必須檢查請求或響應是否確實來自該類型的域,如果不是,則應該拋出一條消息。

這是我現在擁有的代碼:

        HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
        using (WebResponse response = request.GetResponse())
        {
            using (Stream stream = response.GetResponseStream())
            {
                if (stream == null)
                {
                    return null;
                }
                return stream;
            }
        }

任何想法?

使用ResponseUri屬性:

HashSet<String> allowedDomains = new HashSet<String>()
                                 {
                                         "domain1.com",
                                         "domain2.com"
                                 };

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("url");
using (WebResponse response = request.GetResponse())
{
    if (!allowedDomains.Contains(response.ResponseUri.Host))
    {
        throw new IllegalDomainException();
    }
    using (Stream stream = response.GetResponseStream())
    {
        if (stream == null)
        {
            return null;
        }
        return stream;
    }
}

您可能想要修改比較:例如,向后遍歷request.ResponseUri.Host.Split(".")結果,依次比較每個部分與allowedDomains值中的等效部分,您可能想考慮檢查完成:是否要允許重定向? 如果是這樣,請從用戶輸入中創建一個Uri對象,然后檢查該對象的Host屬性。

通常,它是使用UrlReferer HTTP標頭獲取的,但是此標頭不是必需的:可以設置還是不設置。 它取決於HTTP服務器。

可以使用HttpWebResponse.Headers屬性訪問整個標頭:

((HttpWebResponse)response).Headers["Referer"]

老實說,我想向您建議最好的解決方案是使用應用程序密鑰 (任意標識符)。 例如Guid (它可能適用於非常簡單的情況)。

在Web服務器中,您可以定義默認標頭(如果您的網站是使用ASP.NET開發的,則可以在web.config中進行設置 ),這樣來自整個服務器的任何請求都將包含帶有appkey的任意HTTP標頭。

也就是說,您可以定義一個任意標頭,以標識來自您的網站的HTTP響應。 例如: MySite_AppKey 使用這種方法,你應該確認任何HTTP響應包含整個MySite_AppKey並檢查整個的AppKey在一些白名單允許的。

樣本偽代碼:

if(AppAuthorizationManager.IsAuthorized(response.Headers["MySite_AppKey]))
{
     // Do stuff for the authorized request
}

請注意,我描述的是一個非常簡單的實現

暫無
暫無

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

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