69 votes

Rails: Comment fonctionne csrf_meta_tag?

Je suis un développeur PHP apprentissage de Ruby on Rails par la lecture de Michael Hartl du tutoriel. Voici une citation du livre, se référant à "csrf_meta_tag":

...les Rails de la méthode csrf_meta_tag [prévient] cross-site request forgery (CSRF), un type de web malveillant attaque. Ne vous inquiétez pas au sujet de la les détails (je n'ai pas); il suffit de savoir que Rails est de travailler dur pour maintenir votre l'application sécurisée.

La chose est, je suis sincèrement curieux. Comment insérer "csrf-param" et "csrf token" meta tags empêcher CSRF? J'ai essayé de Googler, mais ne pouvait pas trouver quoi que ce soit.

78voto

Frederick Cheung Points 38410

csrf_meta_tag remplit en gros la même chose que les champs de formulaire masqués, mais permet de donner aux requêtes javascript non liées à un formulaire un moyen simple d'obtenir le jeton.

Si vous utilisez la bibliothèque jquery-ujs , le contenu de cette balise méta est automatiquement ajouté (en tant qu'en-tête de demande) à toutes les demandes ajax effectuées.

59voto

jefflunt Points 20244

L' csrf_meta_tag inserts de ce qui est essentiellement une signature numérique dans la page, agissant à titre de vérification que les demandes à venir dans le serveur d'application sont, en fait, de bien des utilisateurs connectés. Cela aide à prévenir le cross-site scripting (un script sur une page totalement indépendante de tir requêtes-à-dire, GMail, alors que vous êtes connecté à votre compte GMail dans un autre onglet).

Je suppose que pour clarifier, l' csrf_meta_tag lui-même ne doit pas empêcher une autre page du coup d'envoi de demandes de votre compte GMail (ou de tout autre service est la cible de l'attaque), mais la "signature numérique" dans l' csrf_meta_tag est utilisé pour vérifier la validité de ces demandes. Requêtes non valides (c'est à dire à partir de cross-site scripting tentatives) d'échec de la validation, et sont donc rejetées.

Pour le dire d'une autre façon, à partir de l'attaquant du point de vue:

Avant d' csrf_meta_tags existé (ils ne sont pas l'apanage des Rails par tous les moyens, la réussite de cross-site scripting attaques permis à un site malveillant afin de soumettre des données à une application web d'une manière qui en fait la demande apparaître comme si il se fait sur le compte de l'utilisateur. Donc, disons que vous êtes un administrateur sur un service web, et dans un onglet du navigateur que vous êtes connecté dans le panneau d'admin pour ce service. Si un site malveillant ouvrir dans un autre onglet ciblé votre service pour l'attaque, le site malveillant pourrait être en mesure d'exécuter des scripts d'admin demandes, telles que le dumping liste des utilisateurs de la base de données, le vol d'autres données sensibles ou potentiellement blesser, d'endommager ou de détruire les données contenues dans le service, tout en apparaissant (à partir du serveur de point de vue) pour être valide les demandes de l'administration eux-mêmes. L' csrf_meta_tag est une façon de signer les demandes, et d'aider à contrer ces tentatives de succès.

Il y a bien des explications plus détaillées sont disponibles ici.

Il serait également éducatif pour faire une "afficher la source" sur l'un de vos Rails généré par pages, et vous verrez ce que le CSRF balise ressemble.

14voto

Amit Pandya Points 3495

Dans les Rails, il va travailler de cette façon

def csrf_meta_tags
    if protect_against_forgery?
      [
        tag('meta', :name => 'csrf-param', :content => request_forgery_protection_token),
        tag('meta', :name => 'csrf-token', :content => form_authenticity_token)
      ].join("\n").html_safe
    end
  end

Voir plus de détails cliquez simplement sur

Vous devez également vérifier Ruby on Rails Guide de Sécurité

voici le joli blog

MAIS je visez plutôt National de la Vulnérabilité de la Base de données, ici est la bonne explication

CWE-352: Cross-Site Request Forgery (CSRF)

CWE-79: Une Neutralisation de l'Entrée Pendant Web de Génération de la Page ("Cross-site Scripting")

Vérifiez ce document CEMT - Commune de la Faiblesse de l'Énumération

4voto

praveenag Points 93

csrf_meta_tags sont des indications permettant aux requêtes ajax de les utiliser comme l'un des paramètres de formulaire pour adresser une requête au serveur. Rails s'attend à ce que le fichier csrf fasse partie de votre corps de formulaire (params) pour traiter vos demandes. En utilisant ces balises meta, vous pouvez construire le corps du formulaire ou l’en-tête csrf selon vos besoins. J'espère que cette réponse aide votre question.

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