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
Nächste SlideShare
Wird geladen in …5
×

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

1.587 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
0 Kommentare
1 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
1.587
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
162
Aktionen
Geteilt
0
Downloads
14
Kommentare
0
Gefällt mir
1
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • 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
  • 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

    ×