我们可以确定MVC EnableCors的起源吗?

时间:2015-01-12 13:37:30

标签: javascript asp.net asp.net-mvc asp.net-web-api cors

我在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”标头,如果服务器验证它或仅仅是浏览器,则绕过浏览器本身的安全规则。如果我不相信它,是否有办法获得可信的原始请求。

3 个答案:

答案 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>