XSS-Protection in Rails 3

Für mein „altes“ Rails 2 Projekt habe ich mir – zum Schutz vor Cross-Site-Scripting (XSS) Attacken – ein kleines Modul geschrieben, das gefährliche HTML-Tags aus jedem Attribut eines Models mittels h() Methode entfernt. In der neuen Version kann ich darauf komplett verzichten.

In Rails 3 werden standardmäßig alle Ausgaben von unerwünschtem Code gesäubert. Ein einfaches aber sehr wirkungsvolles Feature.

Es kann Fälle geben, bei denen man bewusst auf diese Funktion verzichten will. Hierfür steht die raw() Methode zur Verfügung:

  1. < %= raw article.content %>

Die raw() Methode macht nichts anderes, als dass sie das Attribut html_safe des String-Objekts (bzw. ActiveSupport::SafeBuffer) setzt. Dieses wird beim Rendering des Views abgefragt und entscheidet letztendlich darüber, ob der auszugebende HTML-Code gesäubert wird oder nicht.

In meinen Helper-Methoden ziehe ich es vor auf die raw() Methode zu verzichten und html_safe selbst aufzurufen:

  1. def article_head(article)
  2.   "<h1>#{article.title}</h1>
  3.   <span class='date'>#{article.date}</span>".html_safe
  4. end
Share

Comments are closed.