web-dev-qa-db-fra.com

Rails - Protection contre l'injection de code et XSS

J'ai commencé à utiliser Ruby sur rails, et je me demandais s'il y avait une sécurité Gotchas à faire attention aux rails, en particulier en ce qui concerne l'injection de code et les XSS?

Je sais Rails essaie d'empêcher de telles attaques en assainissant des intrants, mais je suppose que cela ne peut pas être infaillible.

21
Magnus

Rails 3 a des très bonnes protections activées par défaut qui attraperont beaucoup de problèmes de sécurité commune.

Spécifiquement l'encodage de sortie aidera à atténuer les attaques XSS, les jetons CSRF sont activés par défaut sur toutes les formes qui devraient aider ici, et aussi longtemps que vous l'utiliserez correctement ActiveCord ou d'autres ormes peuvent aider à atténuer l'injection SQL.

Sur la validation d'entrée avant, il y a évidemment des choses à surveiller. Rails Ne ferez pas la validation de l'entrée pour vous par défaut, de sorte que si les données entrées dans votre application sont transférées dans d'autres applications Web, il reste encore le risque d'attaques XSS survenant.

Cela dit, Rails prend des validations dans le modèle et je recommanderais de faire une validation de la liste blanche de l'entrée là-bas, si possible.

Sur le front d'injection SQL, il est toujours possible d'utiliser SQL brut avec Activerecord et, si vous le faites, les problèmes habituels avec l'injection SQL peuvent survenir, alors encore une fois la validation de liste blanche de toutes les entrées est utile.

Au-delà de cela, il y a encore plusieurs choses à surveiller. L'installation de la base Rails ne fournit pas d'autorisation/d'authentification, de sorte que soit à provenir d'un plugin ou d'être écrite par le développeur.

Un inconvénient des URL de style reposant que l'application Rails produira généralement est qu'il est généralement facile pour un attaquant d'essayer de briser l'autorisation en modifiant l'URL. Par exemple, une URL de http: // mySite/utilisateurs/1 Affiche le premier utilisateur, pourrait être facilement modifié pour avoir un 2 ou plus. Ce n'est pas que c'est moins en sécurité, mais cela facilite la tâche des attaquants de contourner les contrôles d'autorisation.

Il y a quelques bonnes sources d'informations pour la sécurité Rails qui valent la peine d'être lu pour plus d'informations.

The Owasp Rails Guide de sécurité est ici et il y a aussi un livre Sécurité sur rails des programmeurs pragmatiques qui se concentrent sur Rails 2.3 a toujours beaucoup de bonnes informations à considérer (noter que la sécurité sur Rails est désormais épuisée).

11
Rory McCune

Le Feuille de triche Owasp XSS est une excellente ressource pour comprendre tous les moyens que XSS peut arriver:

  • Règle n ° 0 - Ne jamais insérer des données non soignées, sauf dans les emplacements autorisés
  • Règle n ° 1 - HTML Escape avant d'insérer des données non approuvées dans le contenu de l'élément HTML
  • Règle n ° 2 - Attribut Escape avant d'insérer des données non approuvées dans les attributs communs HTML
  • Règle n ° 3 - Echap Javascript avant d'insérer des données non approuvées dans les valeurs de données JavaScript HTML
  • Règle n ° 4 - CSS s'échapper avant d'insérer des données non approuvées dans les valeurs de propriété de style HTML
  • Règle n ° 5 - URL s'échappe avant d'insérer des données non approuvées dans les valeurs de paramètre URL HTML
  • Règle n ° 6 - Utilisez un moteur de stratégie HTML pour valider ou nettoyer le code HTML piloté par l'utilisateur d'une manière ouverte.
  • Règle n ° 7 - Empêcher les XSS basés sur DOM

Tous les règles ci-dessus ne sont pas pris en charge par Rails automatiquement et cela dépend de la version:

Rails 3.x = "Si une chaîne ordinaire est transmise à un <% =%>, Rails vous échappe toujours"
Rails 2.x = Vous devez utiliser h() méthode (ou utilisez quelque chose comme Sniper du site croisé ou Safe Erb )

La liste blanche règle la journée: si vous vous attendez à une abréviation postale américaine de deux lettres, utilisez alors des validations pour accepter uniquement cela.

Guide de sécurité générale: http: //guides.rubyonRails.org/security.html

11
Tate Hansen