3 votes

Rails - Autoriser localhost dans les paramètres CORS uniquement dans le développement

Je suis en train de configurer les paramètres CORS pour mon serveur rails - je veux pouvoir tester mon backend lorsque je l'exécute localement, en utilisant un frontend sur localhost.

Mais, d'après ce que j'ai compris, CORS est un mécanisme de sécurité important contre CSRF( ?), donc lorsque l'application est mise en production, je veux que le backend n'autorise que l'origine du site web en ligne. Comme ça :

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

Je comprends que c'est un peu exagéré d'avoir un utilisateur inconnu qui exécute une application hostile sur localhost sans savoir ce qu'il fait, mais je dirais qu'il vaut mieux prévenir que guérir.

Comment procéder ? Et pourquoi cela n'est-il pas documenté de manière proéminente sur la page Github de Rack::CORS ? J'ai l'impression qu'il y a quelque chose qui m'échappe. Merci de m'éclairer.

5voto

papirtiger Points 1870

Si vous utilisez Rails 5 ou plus ancien, vous pouvez gérer la configuration lorsque vous injectez le middleware Rack::CORS dans la pile :

# 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

Puisque votre application Rails est amorcée lorsque les initialisateurs sont chargés, vous pouvez déterminer l'environnement par le biais de Rails.env . Si vous voulez éviter le codage en dur, vous pouvez utiliser une variable d'environnement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X