Rails - 仅在开发中允许 CORS 设置中的本地主机
Rails - Allow localhost in CORS settings only in development
我正在为我的 rails 服务器配置 CORS 设置 - 我希望能够在 运行 本地测试我的后端,使用本地主机上的前端。
但是,据我了解,CORS 是针对 CSRF(?) 的重要安全机制,因此当应用程序投入生产时,我希望后端仅允许实时网站的来源。像这样:
if development:
allow do
origins 'localhost:3000', 'localhost:3001', 'https://my-app.com'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
if production:
allow do
origins 'https://my-app.com'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
我知道在本地主机上有一个未知用户 运行 一个恶意应用程序并且不知道他们在做什么是一件很困难的事情,但我还是要说安全而不是抱歉。
我该怎么做?为什么这没有在 Rack::CORS 的 Github 页面上突出显示?我有一种感觉,我缺少了什么。请赐教。
如果您使用 Rails 5 或更早版本,您可以在将 Rack::CORS 中间件注入堆栈时处理配置:
# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
if Rails.env.development?
origins 'localhost:3000', 'localhost:3001', 'https://my-app.com'
else
origins 'https://my-app.com'
end
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
由于您的 Rails 应用程序是在加载初始值设定项时启动的,因此您可以通过 Rails.env
确定环境。如果你想避免硬编码,你可以使用环境变量。
我正在为我的 rails 服务器配置 CORS 设置 - 我希望能够在 运行 本地测试我的后端,使用本地主机上的前端。
但是,据我了解,CORS 是针对 CSRF(?) 的重要安全机制,因此当应用程序投入生产时,我希望后端仅允许实时网站的来源。像这样:
if development:
allow do
origins 'localhost:3000', 'localhost:3001', 'https://my-app.com'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
if production:
allow do
origins 'https://my-app.com'
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
我知道在本地主机上有一个未知用户 运行 一个恶意应用程序并且不知道他们在做什么是一件很困难的事情,但我还是要说安全而不是抱歉。
我该怎么做?为什么这没有在 Rack::CORS 的 Github 页面上突出显示?我有一种感觉,我缺少了什么。请赐教。
如果您使用 Rails 5 或更早版本,您可以在将 Rack::CORS 中间件注入堆栈时处理配置:
# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
allow do
if Rails.env.development?
origins 'localhost:3000', 'localhost:3001', 'https://my-app.com'
else
origins 'https://my-app.com'
end
resource '*',
headers: :any,
methods: [:get, :post, :put, :patch, :delete, :options, :head]
end
end
由于您的 Rails 应用程序是在加载初始值设定项时启动的,因此您可以通过 Rails.env
确定环境。如果你想避免硬编码,你可以使用环境变量。