尽管 Rack::Cors [重复],但请求仍触及生产 Rails API
Posted
技术标签:
【中文标题】尽管 Rack::Cors [重复],但请求仍触及生产 Rails API【英文标题】:Requests hit production Rails API despite Rack::Cors [duplicate] 【发布时间】:2019-11-08 11:47:49 【问题描述】:我有一个 Rails API,我在我的application.rb
中设置了Rack::Cors
,以防止来自https://my-website.com
以外的任何来源的请求:
config.middleware.insert_before 0, Rack::Cors do
allow do
origins 'https://my-website.com'
resource '*',
headers: %w[Authorization],
methods: %i[get post put delete options head],
expose: %w[Authorization]
end
end
另外我允许 websocket 连接为:
config.action_cable.url = %r/wss:\/\/*/
config.action_cable.allowed_request_origins = 'https://my-website.com'
最后,我的Application Load Balancer
有一个status
检查器,为此我允许/status
的http 请求为:
config.force_ssl = true
config.ssl_options =
hsts: subdomains: true ,
redirect: exclude: ->(request) request.path =~ /status/
所以你可以看到除了/status
之外的每条路径都应该是https
但我仍然在我的生产错误跟踪器中遇到如下错误:
#590 ActionController::RoutingError: No route matches [OPTIONS] "/"
在详细信息中,我得到的来源是:
当我的CORS configuration
中没有添加起点时,某人如何设法到达我的实际路线?
【问题讨论】:
有人可以使用非浏览器向您的服务器发出 HTTP 请求。 当有人访问https://ip/
时,最后一行(OPTIONS /
)是一个非常标准的“CORS飞行前请求”
CORS 不是“服务器保护”。这只是对浏览器的“建议”。
***.com/questions/4850702/…
是的,你是对的:当你有一个公共端点时,任何人都可以请求。此外,当你有一个生产应用程序时,你每天都会在日志中看到来自机器人、黑客等的大量请求。所以,唯一的办法就是实现认证。
【参考方案1】:
Rack::Cors
仅在请求具有 Access-Control-Request-Method
标头时才响应 OPTIONS
请求,如果有人在没有它的情况下发出该请求 - 请求将命中您的常规路由。
另外请注意,CORS 只是浏览器允许跨域请求的一种方法,任何人都可以使用一些非浏览器脚本或工具来伪造他们想要的任何请求。
【讨论】:
以上是关于尽管 Rack::Cors [重复],但请求仍触及生产 Rails API的主要内容,如果未能解决你的问题,请参考以下文章
我在我的 Rails 应用程序中设置了 CORS,但我仍然收到错误 [重复]
尽管在数据帧上使用 .loc 方法,但仍获得 SettingWithCopyWarning [重复]