EnableCors如何限制原始访问

时间:2017-09-19 11:02:20

标签: asp.net ajax http asp.net-web-api cors

我已经创建了一个WebAPI控制器,如下所示

[EnableCors("http://localhost:1234", "*", "*"]
public class DummyController : ApiController
{
    public string GetDummy()
    {
        return "Iam not DUMMY";
    }
}

当我使用来自locahost:5678托管的应用程序的ajax来启动服务时它会抛出错误,因为它不被允许但是当我从像RestMan这样的restclient执行相同的API时它会返回数据。

问题

1)CORS仅限制ajax请求而不限制正常的HTTP请求,因为我相信postman发送正常的http请求。

2)EnableCors如何限制提供的来源?考虑一下我是否修改了ajax请求中的origin and referrer参数,我可以捕获这些值。 CORS使用什么策略来识别引荐来源网址。

由于W3C声明可以轻松修改HttpReferrer,因此不应依赖其值来授权访问。如果是这种情况,EnableCors会在后面检查什么来授权原点。

我也可以在ajax请求中更改我的来源。请帮助我这个Iam非常困惑

1 个答案:

答案 0 :(得分:0)

  

CORS仅限制ajax请求而不限制正常的HTTP请求,因为我相信邮递员会发送正常的http请求。

是的,特别是 browsers 限制Ajax请求 - 也就是说,默认情况下,浏览器不允许前端JavaScript代码访问来自使用XMLHttpRequest,Fetch API或Ajax进行的跨源请求的响应JavaScript库中的方法。

服务器本身不对跨源请求强制执行任何限制;相反,服务器会向任何向其发出请求的客户发送响应,包括邮递员 - 包括浏览器。

浏览器本身总能获得任何其他客户端的响应;但仅仅因为浏览器获得响应并不意味着浏览器将允许前端JavaScript代码访问该响应。如果响应包含Access-Control-Allow-Origin标头,浏览器将仅向前端代码公开响应以发送代码。

  

EnableCors如何限制提供的来源?

没有。当您启用CORS启用服务器时,唯一的影响是使服务器根据它收到的特定请求标头的值发送其他响应标头 - 特别是Origin请求标头。

  

考虑我是否修改了ajax请求中的origin and referrer参数,我可以捕获值。 CORS使用什么策略来识别引荐来源网址。

服务器不会(也不能)对Origin值进行任何验证,以确认它没有被欺骗或其他什么。但CORS协议不要求服务器这样做 - 因为所有CORS实施都是由浏览器完成的。

  

由于W3C声明可以轻松修改HttpReferrer,因此不应依赖其值来授权访问。如果是这种情况,EnableCors会在后面检查什么来授权原点。

     

我也可以在ajax请求中更改我的来源。请帮助我这个Iam非常困惑

浏览器知道发送跨源请求的任何前端代码的真正来源,并且浏览器根据他们知道的请求的真正来源进行CORS检查 - 而不是针对值Origin标题。

浏览器是设置 Origin请求标头并通过网络发送的开头;他们根据他们所知道的真正来源设置Origin值,而不是为了他们自己的用途 - 因为他们已经知道原点是什么,这个值是他们在内部使用的。

因此,即使您设法更改请求的Origin标头,这对浏览器也无关紧要 - 它将忽略该值并继续检查真实来源。

cf。答案在 In the respective of security, is it meaningful to allow CORS for specific domains?