0

ユーザーが許可されたドメイン名のみを接続できるようにすることについて質問があります。

だから私が心に留めているのは次のとおりです。*。domain1.comのようなdomaina名のリストがあります。*.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;
            }
        }

何か案が?

4

2 に答える 2

1

プロパティを使用し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プロパティを確認します。

于 2013-03-08T08:45:05.487 に答える
0

通常、これはUrlReferer HTTPヘッダーを使用して取得されますが、このヘッダーは必須ではありません。設定することも、設定しないこともできます。HTTPサーバーによって異なります。

HttpWebResponse.Headersプロパティを使用してヘッダー全体にアクセスできます。

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

正直なところ、最善の解決策はアプリケーションキー(任意の識別子)を使用することです。たとえば、a Guid(非常に単純な場合に機能する可能性があります)。

Webサーバーでは、デフォルトのヘッダーを定義できます(WebサイトがASP.NETを使用して開発されている場合は、web.configで定義できます)。サーバー全体からの要求には、 appkeyを使用して任意のHTTPヘッダーが含まれます。

つまり、WebサイトからのHTTP応答を識別する可能性のある任意のヘッダーを定義できます。例:MySite_AppKey。このアプローチを使用して、HTTP応答にMySite_AppKey全体が含まれていることを確認し、アプリキー全体がホワイトリストで許可されているかどうかを確認する必要があります。

サンプルの擬似コード:

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

非常に単純な実装について説明していることに注意してください

于 2013-03-08T08:43:02.790 に答える