turk porno porno escort rokettube
Ergebnis 1 bis 11 von 11

Thema: CSRF Protection Implementierung

  1. #1
    Erfahrener Benutzer Avatar von Octavian
    Registriert seit
    14.12.2006
    Ort
    Nähe Bonn
    Beiträge
    177
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard CSRF Protection Implementierung

    Hallo zusammen
    Da ich aus gegebenem Anlass gezwungen war mich für mein aktuelles Projekt mit CSRF Angriffen und Schutzmaßnahmen mit Hilfe des ZendFrameworks zu beschäftigen, möchte ich euch hier meine Lösung präsentieren. Die Lösung ist denkbar einfach und ich würde mich freuen wenn ihr es selbst einmal ausprobiert und Feedback gebt was noch verbessert werden könnte und natürlich ob euch Sicherheitslücken mit dieser Implementierung einfallen.

    Artikel: http://octavian.supersized.org/archi...todoyo.de.html


    Wer von "CSRF" bislang noch nichts gehört hat, dem empfehle ich folgende Lektüre
    - http://de.wikipedia.org/wiki/CSRF
    - http://shiflett.org/articles/cross-s...uest-forgeries
    - http://www.cgisecurity.com/articles/csrf-faq.shtml
    Geändert von Octavian (23.04.2008 um 12:26 Uhr)

  2. #2
    Erfahrener Benutzer Avatar von Pwner
    Registriert seit
    06.11.2007
    Beiträge
    560
    Thanks
    0
    Thanked 8 Times in 5 Posts

    Standard

    Zum Ausprobieren muss ich ja nen Controller von dir ableiten. Das ist ja nicht so toll. Das wäre in einem Plugin oder ActionHelper weitaus besser aufgehoben. Für die Session fände ich Zend_Session angebrachter.

    Ich bin zwar mit ZF 1.5 noch nicht vertraut, aber vielleicht könnte das ganze sogar ein eigenes Zend_Form_Element übernehmen.

  3. #3
    Erfahrener Benutzer Avatar von Octavian
    Registriert seit
    14.12.2006
    Ort
    Nähe Bonn
    Beiträge
    177
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hi,
    klar, man könnte auch nen ActionHelper draus basteln. Da ich sowieso Zend_Controller_Action abgeleitet habe, hab ich es einfach da reingepackt, ging am schnellsten.
    Zend_Form nutze ich garnich, aber hast recht, dass man auch automatisch bei allen Forms die man damit generiert ein entsprechendes Hidden Element beifügen könnte, erspart man sich das manuelle hinzufügen im Template und kann es somit auch nicht vergessen.
    Zend_Session nutze ich nur durch Zend_Auth, wäre aber wirklich schöner es in nem eigenen Namespace zu kapseln.

    Danke schonmal für deine Anregungen
    todoyo.de - notieren. erledigen. freigeben.

  4. #4
    Erfahrener Benutzer
    Registriert seit
    10.09.2007
    Ort
    Wuppertal
    Beiträge
    5.725
    Thanks
    1
    Thanked 41 Times in 40 Posts

    Standard

    Wäre es nicht schon behoben gewesen wenn man die Daten immer per POST anstatt mit GET löscht? So als grundsätzliche Frage.. Die Token-Lösung finde ich nicht gerade elegant
    Neues Projekt: zandman.de - Status: WIP




  5. #5
    Erfahrener Benutzer Avatar von Octavian
    Registriert seit
    14.12.2006
    Ort
    Nähe Bonn
    Beiträge
    177
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Hi.
    Nein leider nicht. Wie man in vielen Quellen zu CSRF nachlesen kann, würde das höchstens den Aufwand für einen "Angreifer" etwas erhöhen, weil er dir statt einem Link zu einem Bild, ein Formular unterjubeln muss. Grundsätzlich macht es deine Anwendung aber kein Stück sicherer.

    Der Token ist dafür da, um zu verhindern, dass überhaupt ungewollt Aktionen durch meine noch irgendwo laufende Session ausgeführt werden können.

    Nehmen wir an, du bist bei Amazon.de eingeloggt und jemand schickt dir einen Link zu seinem vermeintlichen Gästebuch. Nachdem du ein netten Eintrag dort hinterlassen hast, könnte dieser Jemand einfach den Post auf einen "Diese Kaffemaschine sofort kaufen" Request umbiegen, und da du ja bei Amazon eingeloggt bist, wäre es als ob du selbst diese Aktion ausgeführt hättest.

    Durch Verwendung eines Tokens, wäre es aber garnicht möglich diese Aktion auszuführen, wenn Amazon einen gültigen Token erzwingt, der nur im eigenen Formular auf der eigenen Seite einmalig generiert wird.

    Hätte Amazon jetzt allerdings eine Cross-Site-Scripting Schwachstelle, könnte der Gästebuchersteller zuerst das Amazon Formular, welches einen gültigen
    Token besitzt, mit JavaScript auslesen und schon hättest du eine neue Kaffeemaschine

    http://de.wikipedia.org/wiki/CSRF#Serverseitig

    Eben weil das Thema so vielschichtig ist, muss man so "unelegante" Sachen wie einen Token benutzen. Deshalb wollte ich eine möglichst einfache Lösung anbieten, die ohne großen Aufwand eingebaut werden kann und dennoch effektiv ist.
    Geändert von Octavian (23.04.2008 um 12:04 Uhr)
    todoyo.de - notieren. erledigen. freigeben.

  6. #6
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Nein leider nicht. Wie man in vielen Quellen zu CSRF nachlesen kann, würde das höchstens den Aufwand für einen "Angreifer" etwas erhöhen, weil er dir statt einem Link zu einem Bild, ein Formular unterjubeln muss.
    Das wäre insofern aber wenig tragisch, da ein Formular noch Interaktion benötigt, ein Bild, jedoch nicht

  7. #7
    Erfahrener Benutzer Avatar von Octavian
    Registriert seit
    14.12.2006
    Ort
    Nähe Bonn
    Beiträge
    177
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Tragisch wird das Ganze dann, wenn jemand durch eine XSS Lücke, das Formular einfach so in eine von dir gern genutzte Seite einbaut, dass du überhaupt nicht merkst, was da im Hintergrund passiert.

    Nehmen wir doch mal das Forum hier. Ich könnte hier einfach ein Bild Verlinken, welcher als Bildpfad "http://www.zfforum.de/login.php?do=logout" hätte. Dann würden alle Leute, welche diesen Thread aufrufen, ausgeloggt.

    Glücklicherweise besitzt dieses Forum aber einen Schutz dagegen:
    http://www.zfforum.de/login.php?do=logout&logouthash=21e781a89f85633ab1b86bd6b1666382

    Und jemanden ausloggen ist nun wirklich noch das kleinste Übel...

    Sagt euch der "MySpace Samy Worm" etwas? Das gleiche Spiel jedoch zusätzlich noch selbstreplizierend.
    todoyo.de - notieren. erledigen. freigeben.

  8. #8
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Ich will das Problem ja auch garnicht runter spielen. Ich wollte nur vorsichtig darauf hinweisen, dass es ebenso ein grundsätzliches Problem einer Anwendung ist, nicht nur "einfach so" von webseiten. Wenn nun ein Formular Werte ebenso per GET übermittelt (also im action-Attribut des form-Tags), dann liegt es auch an der Anwendung, dass es die Werte nur bei einem POST-Request auswertet, nicht "einfach so". Eine XSS-Lücke wär ja noch nen weiteres Problem, was es ebenso abzufangen gilt.

    Nebenbei hat die Lösung mit dem Token ja auch noch nen netten Nebeneffekt: Man kann Reload-Requests abfangen

  9. #9
    Erfahrener Benutzer Avatar von Octavian
    Registriert seit
    14.12.2006
    Ort
    Nähe Bonn
    Beiträge
    177
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Genau, das kommt noch hinzu, dass Formulare dann nicht mehr 2mal abgeschickt werden können

    Das mit dem "POST erzwingen" sehe ich ja genau so. Habe ich ja auch durch die "checkPost()" Methode implementiert. Für den Anfang schonmal eine gute Maßnahme um Angriffe zu erschweren, klaro =)

    CSRF Protection setzt immer XSS Protection voraus, sonst sind alle Maßnahmen wirklos.

    Dann sind wir uns ja einig *g* Versuche ja nur etwas Promotion/Aufklärung für diese Art der Angriffe und Schutzmaßnahmen zu betreiben
    todoyo.de - notieren. erledigen. freigeben.

  10. #10
    Erfahrener Benutzer
    Registriert seit
    28.12.2006
    Beiträge
    9.966
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Das mit dem "POST erzwingen" sehe ich ja genau so. Habe ich ja auch durch die "checkPost()" Methode implementiert. Für den Anfang schonmal eine gute Maßnahme um Angriffe zu erschweren, klaro =)
    Reicht dafür nicht
    PHP-Code:
    $request->isPost(); 
    bzw dessen Parameter-Äquivalent
    PHP-Code:
    $param1 $request->getPost('param1',null); 
    ?

  11. #11
    Erfahrener Benutzer Avatar von Octavian
    Registriert seit
    14.12.2006
    Ort
    Nähe Bonn
    Beiträge
    177
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Standard

    Klar reicht das
    Hab es nur gekapselt um nich andauernd in den Actions
    PHP-Code:
    if (!$request->isPost()) {
        
    // Fehlermeldung erzeugen
        // Umleiten

    reinkopieren zu müssen und stattdessen direkt oben in jedem Controller auf einem Blick sehen zu können, welche Actions ich wie geschützt habe.
    todoyo.de - notieren. erledigen. freigeben.

Ähnliche Themen

  1. Referenz Implementierung: Layout
    Von saphir2k im Forum MVC
    Antworten: 0
    Letzter Beitrag: 14.03.2008, 00:30
  2. Flood-Protection?
    Von ShoX im Forum Einsteigerfragen
    Antworten: 26
    Letzter Beitrag: 30.10.2007, 17:27
  3. Antworten: 3
    Letzter Beitrag: 09.09.2007, 16:50
  4. Flood-Protection
    Von ShoX im Forum MVC
    Antworten: 8
    Letzter Beitrag: 09.03.2007, 09:09
  5. Implementierung des sAjax frameworks
    Von TeeJay im Forum Konzepte & Ideen
    Antworten: 14
    Letzter Beitrag: 13.02.2007, 12:37

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •