spring security CORS 过滤器允许没有“Origin”标头的请求

Posted

技术标签:

【中文标题】spring security CORS 过滤器允许没有“Origin”标头的请求【英文标题】:spring security CORS filter allows requests without the "Origin" header 【发布时间】:2018-08-19 22:08:54 【问题描述】:

我正在尝试将 Spring Security CORS 过滤器添加到 REST API。

我已经成功配置了 CORS 过滤器,如果我向我的请求中添加了一个无效的“Origin”标头,该请求将被正确拒绝,并显示 403 - 禁止 http 状态。

问题是,如果我发送一个没有“Origin”标头的请求,CORS 过滤器会对其进行授权,并且响应代码是 http 200。

    CORS 机制就是这样设计的吗? 我想要实现的目标是否正确,即拒绝所有没有“Origin”标头的请求? 有没有办法告诉 Spring Security CORS 过滤器拒绝此类请求?

【问题讨论】:

CORS 是浏览器端的限制。没有Origin: 的请求通常来自非浏览器客户端,它们可以发送他们想要的任何内容。他们可以轻松发送任何来源。你想防止什么? 好的,感谢您为我指明了正确的方向,但这是否意味着向 REST API 添加 CORS 过滤器没有意义? 仅当您想允许跨域 javascript 访问时。 【参考方案1】:

正如 SLaks 在他的 cmets 中描述的那样,CORS 标头由浏览器客户端自动添加和填充,CORS 过滤仅在这种情况下才有意义。

当请求来自“非浏览器”客户端时,任何内容都可以在 Origin: 标头中传递,这使得强制客户端添加标头和服务器拒绝没有它的请求毫无意义。

因此问题的答案是:

    是的 不,这样做没有意义 没有

【讨论】:

以上是关于spring security CORS 过滤器允许没有“Origin”标头的请求的主要内容,如果未能解决你的问题,请参考以下文章

Spring Security oauth2 cors 过滤器不起作用

Spring Security CORS 过滤器不起作用

spring security CORS 过滤器允许没有“Origin”标头的请求

身份验证过滤器之前的 CORS 过滤器 - 不太安全? Spring Security 过滤器链序

添加了 Spring Security CORS 过滤器 - 从 DB 检索的日期显示在数值中

添加了 Spring Security CORS 过滤器 - 从 DB 检索的日期显示在数值中