MVC EnableCors我们能确定来源吗?

MVC EnableCors can we be sure of the origin?

我阅读了一篇关于 asp.net 的文章。

他们在 javascript ajax WebApi 调用中使用 Oauth2 密码 grand_type。

如果我们不允许 CORS(Cross-origin 资源共享),这是安全的。但我希望允许其他网站将此 api 与 auth2.

一起使用

我的问题是,我如何确定他们不是有人在我的服务器上发帖。 有些人可以假装它在这个网站上(比如在 "System32\drivers\etc\hosts" 或本地 dns 中更改主机文件)

EnableCors 属性是否在浏览器和主机上双重检查主机的有效性还是浏览器的问题?

其他网站只有javascript,没有server-side像asp或php ...

如果能提供Cors的安全文档就好了

坦克你。

编辑: 我不是问如何使用它。请问是否可以绕过alowed host

由于调用是由 ajax 在 javascript 上进行的,这是我在发出请求时获得的客户端 ip,我在 [=43= 上获得 HTTP referer 进行验证], 但我不信任它,因为客户可以更改它。

我在问我是否可以信任 "Access-Control-Allow-Origin" header,如果服务器验证它或者它是否仅适用于浏览器,绕过浏览器本身的安全规则。如果我不相信它,有没有办法获得可信来源请求。

扩展我的评论。

这是一个操作过滤器,仅限制除特定 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

没有直接关联

您可以在 web.config 中添加以下配置。

<configuration>
  <system.webServer>
    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="http://www.myapp.com" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>
</configuration>

CORS 与身份验证无关...它与协作有关。

这是帮助其他网站不陷入麻烦的方式。
默认情况下,客户端的浏览器禁止跨源请求。但是它可以询问你的服务器:"Hey, guy, don't you mind if client code originating from that server gets data from you?"
如果默认情况下您没有为任何站点启用 CORS,则客户端代码无法从您的服务器读取数据。但是当开发者故意引入这样的行为时,他可以向你请求明确的许可。

CORS 是保护第三方而非您的数据的方式。

允许请求后,除非您不关心,否则必须像往常一样对其进行身份验证和授权=)

因此无需验证原产地声明。此外,此来源信息不得参与 authentication/authorization 信息。如果您确实需要对请求方进行身份验证,那么其他服务器必须针对您的服务对自己进行身份验证,并且仅在之后才向其客户端提供数据,从而充当代理。