Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Rails 3 XSS Protection (Rails user group Hamburg 2009-12-09)

1,739 views

Published on

This is the short talk I gave at the Rails usergroup Hamburg event on 2009-12-09.

Published in: Technology
  • Be the first to comment

Rails 3 XSS Protection (Rails user group Hamburg 2009-12-09)

  1. 1. Rails 3.0 XSS Protection in ERB und das rails_xss-Plugin für Rails 2.3
  2. 2. Worum geht‘s?
  3. 3. XSS Cross-Site Scripting
  4. 4. XSS Cross-Site Scripting Formular Web- site
  5. 5. XSS Cross-Site Scripting Formular Web- site
  6. 6. XSS Cross-Site Scripting Böses Script Formular Web- site
  7. 7. XSS Cross-Site Scripting Formular Web- Böses site Script
  8. 8. XSS Cross-Site Scripting Formular Web- Böses site Script
  9. 9. XSS Cross-Site Scripting unschuldiger Seitenaufruf Formular Web- Böses site Script
  10. 10. XSS Cross-Site Scripting unschuldiger Seitenaufruf Formular Web- Böses site Script Böses Script
  11. 11. XSS Cross-Site Scripting unschuldiger Seitenaufruf Formular Web- Böses site Script Böses Script
  12. 12. Unsichere Strings???
  13. 13. ?
  14. 14. Strings, die potentiell gefährlich sind, wenn sie auf einer Website ausgegeben werden
  15. 15. Beispiele • Benutzereingaben (params-Hash) • Daten aus der DB • Hartgecodete Strings von unvorsichtigen Programmierern • Kombinationen davon (z.B. Helper) • …alles, was evtl. ein böses Script sein könnte
  16. 16. Wie schützt man sich bei Rails 2?
  17. 17. <%=h some_string %>
  18. 18. Der h-Helper • Alias für html_escape • Escaped alle gefährlichen Zeichen, z.B: HTML-Tags, in unsicheren Strings • <li>foo</li> ➜ &lt;li&gt;foo&lt;/li&gt;
  19. 19. Wie schützt man sich unter Rails 3?
  20. 20. <%= some_string %>
  21. 21. Kein h !!!
  22. 22. Kein h !!! ➜ Alle Strings durch h-Helper gefiltert
  23. 23. Manchmal will ich das gar nicht!
  24. 24. String als sicher kennzeichnen (1/2) • Attribut lesen: my_string.html_safe? ➜ false/true • Als safe markieren: my_string.html_safe!
  25. 25. String als sicher kennzeichnen (2/2) • für Helper: safe_helper :my_helper • In Views: <%= raw @article.textilized %>
  26. 26. Rails 3 is paranoid !!!
  27. 27. Um Safe-Status zu behalten, nur: << concat +
  28. 28. Crazy paranoid stuff • safe_stuff + more_safe_stuff ➜ safe • "#{safe_stuff}#{more_safe_stuff}" ➜ unsafe
  29. 29. Crazy, not so paranoid stuff (1/2) def bar_helper "<p>bar</p>" end def foo_helper content_tag "p" do '<script type="text/javascript">alert("foo");</script>' end end
  30. 30. Crazy, not so paranoid stuff (2/2)
  31. 31. Mitdenken nicht vergessen!!!
  32. 32. Ich hab ne Rails 2.3-App, und ich würde gerne die Templates an das neue Default-Verhalten anpassen, hab aber keinen Bock, das noch recht instabile Rails 3.0 zu nehmen, weil ich da ja quasi ne ganze Menge Zeugs mitheirate, das ich entweder nicht gebrauchen kann, wo ich aktuell keine Zeit habe, mich reinzuarbeiten oder was ich einfach zu unausgegoren halte, und ich hab einfach keine Zeit oder keinen Bock oder beides, um mich nach jeden paar Commits da wieder reinzufrickeln um zu checken was eigentlich dieses mal wieder kaputt gegangen ist und dann irgendwelche Entwicklungsversionen von abhängigen Gems zu installieren und all der aufwändige Scheiß, weil irgendwann muss ich ja auch noch mal arbeiten und so denn von alleine verdient sich Geld ja bekanntlich nicht.
  33. 33. Jahaa! Geht!
  34. 34. rails_xss von NZKoz • Plugin für Rails 2.3 • Verwendet erubis-Gem zum erb-Parsen • Imitiert Default-Verhalten von Rails 3 • http://github.com/NZKoz/rails_xss/
  35. 35. ? Fragen?
  36. 36. ! Ralph von der Heyden http://rvdh.de @ralph

×