我在asp.net上看了一篇文章。
他们在javascript ajax调用WebApi时使用Oauth2密码grand_type。
如果我们不允许CORS(跨源资源共享),这是安全的。但我希望允许其他网站使用此api和auth2。
我的问题是,我怎么能确定他们不是有人发布到我的服务器。 有人可以假装它在这个网站上(比如在“System32 \ drivers \ etc \ hosts”或本地dns中更改主机文件)
EnableCors属性是否在浏览器和主机上仔细检查主机的有效性,或者是浏览器?
另一个网站只是javascript,没有像asp或php这样的服务器端......
如果您可以为Cors提供安全文档,那将非常好。
坦克你。
修改 我不是问如何使用它。我问的是,是否可以绕过这个主机。
由于调用是由ajax在javascript上进行的,它是我在获取请求时得到的客户端IP,我得到HTTP referer在服务器端验证,但我不相信它,因为客户端可以改变它。
我问我是否可以信任“Access-Control-Allow-Origin”标头,如果服务器验证它或仅仅是浏览器,则绕过浏览器本身的安全规则。如果我不相信它,是否有办法获得可信的原始请求。
答案 0 :(得分:2)
扩展我的评论。
这是一个动作过滤器,仅限制除特定IP地址以外的所有IP地址的访问权限:
public class RestrictIpAttribute : ActionFilterAttribute
{
private readonly string[] _allowedIPs;
public RestrictIpAttribute(string[] allowedIPs)
{
_allowedIPs = allowedIPs;
}
public override void OnActionExecuting(HttpActionContext actionContext)
{
var context = actionContext.Request.Properties["MS_HttpContext"] as System.Web.HttpContextBase;
string userIP = context.Request.UserHostAddress;
if (_allowedIPs.All(ip => ip != userIP))
{
actionContext.Response =
new HttpResponseMessage(System.Net.HttpStatusCode.Forbidden)
{
Content = new StringContent("Unauthorized IP Address")
};
}
}
}
您可以将允许的IP地址放入数据库,配置文件或任何您想要的位置。
作为旁注,此解决方案未直接连接到允许CORS
答案 1 :(得分:2)
CORS与身份验证无关......它与协作有关。
这是帮助其他网站避免麻烦的方法
默认情况下,客户端的浏览器禁止跨源请求。但它可以询问您的服务器:"嘿,伙计,如果源自该服务器的客户端代码从您那里获取数据,请不要介意?"
如果您默认情况下不为任何站点启用CORS,则客户端代码无法从您的服务器读取数据。但是当开发人员故意引入这种行为时,他可以要求你明确许可。
CORS是保护第三方的方式,而不是您的数据。
在允许请求之后,必须像往常一样进行身份验证和授权,除非您不在乎=)
因此,无需验证原产地声明。此外,该原始信息必须参与认证/授权信息。如果您确实需要对请求方进行身份验证,那么其他服务器必须针对您的服务进行身份验证,并且只有在向客户端提供数据后才能作为代理进行身份验证。
答案 2 :(得分:0)
您可以在web.config中添加以下配置。
<configuration>
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://www.myapp.com" />
</customHeaders>
</httpProtocol>
</system.webServer>
</configuration>