CORS 不工作 ASP.Net MVC5
Posted
技术标签:
【中文标题】CORS 不工作 ASP.Net MVC5【英文标题】:CORS not working ASP.Net MVC5 【发布时间】:2018-09-28 01:41:29 【问题描述】:我正在尝试使用 CORS 阻止对我的资源的跨域访问。我也尝试过WebApi.Cors
和自定义ActionFilter
。但我仍然能够从不允许的域访问数据。
我的ActionFilter
代码如下
public class AllowCrossSiteAttribute : ActionFilterAttribute
public override void OnActionExecuting(ActionExecutingContext filterContext)
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Credentials", "true");
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Origin", "https://example.com");
filterContext.RequestContext.HttpContext.Response.AddHeader("Access-Control-Allow-Headers", "*");
base.OnActionExecuting(filterContext);
我的控制器
[HttpGet]
[AllowCrossSite]
public ActionResult Index(string username)
//return json data
这些标头存在于响应标头中,但是为什么请求没有阻止来自其他域的请求,我做错了什么?请帮忙
【问题讨论】:
【参考方案1】:添加响应标头实际上不会提供任何类型的安全性。常规 cors 实现仅添加那些响应标头以通知客户端已应用的 cors 规则。
服务器上的某些东西需要将您的 cors 规则与请求的 origin
/ method
等标头进行比较,如果它们不匹配,则发回 4XX 响应。
NuGet 包Microsoft.AspNet.WebApi.Cors
允许您执行以下操作:
[EnableCors(origins: "https://example.com")]
如果您更喜欢自己的自定义实现,您可以在github 上查看此属性的源代码。这应该让您对手工制作 cors 需要做什么有一个相当好的了解。它比看起来简单,真的。
【讨论】:
感谢您的回答,我们有什么办法可以防止GET
上的CSRF
跨站请求伪造?我仍然可以使用所需的headers
到GET
请求伪造请求并获取数据。
是的,带有授权标头和访问令牌验证。 IdentityServer3/4 是解决此问题的首选解决方案。在这方面,仅 CORS 并不是一个足够的安全机制,它只是第一道防线。
非常感谢您抽出宝贵时间,非常感谢。感谢您为我指明了正确的方向。以上是关于CORS 不工作 ASP.Net MVC5的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET 5:Azure Web 应用 CORS 在延迟后停止工作
根据官方文档,Asp.net Core 3.0 CORS 无法正常工作