[英]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.