Wie kann ich Cross-Site-Request-Forgery mit Perl und Apache verhindern?
Frage
Gibt es irgendwelche transparente Bibliothek, die ich einfach so verwenden oder etwas kann ich verhindern kann, Cross-Site Fälschungs Anfrage (CSRF) mit Perl und Apache? Wie kann ich generieren Token für Formulare und sie serverseitige Validierung?
Lösung
Um von "Cross-Site Request Forgery" von Server-Seite zu schützen, ist es am besten:
- Verwenden Sie HTML Flucht. Wenn Sie einige Template-System wie Template Toolkit verwenden, sollten Sie seine Flucht Fähigkeiten nutzen. Wenn Sie CGI.pm verwenden, hat es „escape“ sub, dies zu tun.
- Begrenzungs Lebensdauer der Session-Cookies auf relativ kurze Zeiträume. Für CGI :: Session kann mit $ Session-> verfallen ($ Zeit) durchgeführt werden.
- Überprüfen Sie referer wenn verwundbar Seiten ausgegeben werden.
- Verwenden Sie / akzeptieren GET-Anforderung nicht zu Daten ändern.
Dadurch ist Rahmen für spezifische, aber einfach.
Andere Tipps
Haben Sie einen Blick auf, was CGI :: Anwendung :: Plugin: : ProtectCSRF tut. Dieses Modul ist für die CGI :: Anwendungsrahmen.
Es sollte nicht zu schwer sein, das Modul für andere Frameworks zu ändern. Grundsätzlich erhalten Benutzer bilden ein verstecktes HTML-Feld mit den generierten Token hinzugefügt, und das Sitzungsobjekt erhält den gleichen Grund. Wenn das Formular abgeschickt wird, wird die Form vorgelegt Token in dem Session-Objekt auf den Token verglichen (die auf dem Server). Wenn sie nicht übereinstimmen, hat ein CSRF wahrscheinlich aufgetreten ist.
Es gibt auch eine Katalysator-Plugin: Katalysator ::-Controller :: RequestToken
Diese Module verwenden Attribut-Handler, so gibt es sehr wenig Änderungen an Ihrem bestehenden App erforderlich ist.