0
Rails 3.0
XSS Protection in ERB
   und das rails_xss-Plugin für Rails 2.3
Worum geht‘s?
XSS
Cross-Site Scripting
XSS
Cross-Site Scripting

    Formular


               Web-
               site
XSS
Cross-Site Scripting

    Formular


               Web-
               site
XSS
Cross-Site Scripting
  Böses
     Script


        Formular


                   Web-
                   site
XSS
Cross-Site Scripting

    Formular


               Web-   Böses
               site      Script
XSS
Cross-Site Scripting

    Formular


               Web-   Böses
               site      Script
XSS
Cross-Site Scripting
                            unschuldiger
                        Seitenaufruf


    Formular


  ...
XSS
Cross-Site Scripting
                            unschuldiger
                        Seitenaufruf


    Formular


  ...
XSS
Cross-Site Scripting
                            unschuldiger
                        Seitenaufruf


    Formular


  ...
Unsichere Strings???
?
Strings, die potentiell
gefährlich sind, wenn sie
   auf einer Website
  ausgegeben werden
Beispiele
• Benutzereingaben (params-Hash)
• Daten aus der DB
• Hartgecodete Strings von unvorsichtigen
  Programmierern
•...
Wie schützt man
sich bei Rails 2?
<%=h some_string %>
Der h-Helper

• Alias für html_escape
• Escaped alle gefährlichen Zeichen, z.B:
  HTML-Tags, in unsicheren Strings
• <li>f...
Wie schützt man sich
   unter Rails 3?
<%= some_string %>
Kein h !!!
Kein h !!!
➜ Alle Strings durch h-Helper gefiltert
Manchmal will ich das
     gar nicht!
String als sicher
   kennzeichnen (1/2)
• Attribut lesen:
  my_string.html_safe? ➜ false/true
• Als safe markieren:
  my_s...
String als sicher
   kennzeichnen (2/2)
• für Helper:
  safe_helper :my_helper
• In Views:
  <%= raw @article.textilized %>
Rails 3 is paranoid !!!
Um Safe-Status zu behalten, nur:


<<         concat            +
Crazy paranoid stuff

• safe_stuff + more_safe_stuff
  ➜ safe
• "#{safe_stuff}#{more_safe_stuff}"
  ➜ unsafe
Crazy, not so paranoid
      stuff (1/2)
def bar_helper
  "<p>bar</p>"
end




def foo_helper
  content_tag "p" do
    '<s...
Crazy, not so paranoid
      stuff (2/2)
Mitdenken
nicht vergessen!!!
Ich hab ne Rails 2.3-App,
    und ich würde gerne die Templates an das
neue Default-Verhalten anpassen, hab aber keinen Bo...
Jahaa! Geht!
rails_xss von NZKoz

• Plugin für Rails 2.3
• Verwendet erubis-Gem zum erb-Parsen
• Imitiert Default-Verhalten von Rails 3...
?   Fragen?
!
    Ralph von der Heyden
    http://rvdh.de
    @ralph
Upcoming SlideShare
Loading in...5
×

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

1,341

Published on

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

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,341
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • M&amp;#xF6;gliche Angriffe:
    * User-Session entf&amp;#xFC;hren (Phishing)
    * Defacements
    * reflektiv vs. persistent
  • Transcript of "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
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×