2010-10-06 11 views
9

Ich bin neu in der Sicherheit von Web-Anwendungen. Ich entwickle eine Anwendung in CakePHP und einer meiner Freunde erzählte mir von den Cross-Site Request Forgery (CSRF) und Cross-Site Scripting (XSS) Attacken etc. nicht sicher, wie viele mehr es gibt.CakePHP Security

Ich brauche etwas Hilfe zu verstehen, wie Cakephp meine Web-App gegen diese zu verteidigen. Wir haben ein niedriges Budget und wir können keinen Sicherheitskonsulenten einstellen. Wir entwickeln immer noch die App und planen, sie bis Ende des Monats freizugeben. also willst du auf die anfänglichen Sachen aufpassen, die mir helfen können, nicht gehackt zu werden;)

Antwort

17

Es gibt (und kann nicht sein) ein Tool, das du bereitstellen kannst und dann musst du nie wieder über Sicherheit nachdenken. Die Bereitstellung von "Anti-XSS" Hacks wie CakePHPs Sanitize::clean wird durch Blockieren einer gültigen Eingabe in die Wege geleitet, während die App nicht immer sicher ist. Eingabefilterhacks sind bestenfalls eine Verschleierungsmaßnahme und keine Lösung für Sicherheitslücken.

Um eine sichere Webanwendung zu haben, müssen Sie von Grund auf eine sichere Webanwendung schreiben. Das bedeutet vor allem Aufmerksamkeit für Details, wenn Sie Strings von einem Kontext in einen anderen einfügen. Insbesondere gilt Folgendes:

  • jederzeit schreiben Sie einen String in HTML Textinhalt oder Attributwert, HTML-entkommen es (htmlspecialchars()) HTML-Injektion führt zu XSS zu vermeiden. Dies ist nicht nur eine Frage von Benutzereingaben, die Angriffe enthalten könnten, es ist die korrekte Art, reinen Text in HTML zu schreiben.

    Wo HTML-Hilfsmethoden verwendet werden, sollten sie sich standardmäßig um das HTML-Escapen dieser Elemente kümmern (es sei denn, Sie deaktivieren escape); Es ist sehr bedauerlich, dass das CakePHP-Tutorial die schlechte Praxis beinhaltet, nicht-restringierte Strings in HTML für Text außerhalb von HTML-Helfern zu wiederholen.

  • Jedes Mal, wenn Sie SQL-Abfragen mit Zeichenfolgenwerten erstellen, SQL-escape (mit einer geeigneten Funktion für Ihre Datenbank wie mysql_real_escape_string).

    Wenn Sie CakePHP's ORM verwenden und kein eigenes SQL schreiben, müssen Sie sich darüber keine Gedanken machen.

  • Vermeiden Sie die Verwendung von Benutzereingaben (z. B. Datei-Upload-Namen), um Dateien im Dateisystem zu benennen (stattdessen eindeutige eindeutige IDs zu generieren) oder als Teil eines Befehls system().

  • Fügen Sie die Security Komponente hinzu, um ein Formularübergabe-Tokenschema hinzuzufügen, das XSRF auf von CakePHP generierten Formularen verhindert.

+0

Dank für einen Crash-Kurs auf Sicherheit. eine Frage bei der Verwendung von HTML Helpers doesnt - htmlspecialchars() und mysql_real_escape_string() passieren automatisch? –

+0

Bei Verwendung von HTML-Helfern wird 'htmlspecialchars()' standardmäßig verwendet, yes, es sei denn, Sie setzen '' escape '=> false'. mysql_real_escape_string() 'ist das nicht, da es keinen Sinn ergibt, SQL-entweichende HTML-Ausgaben zu erhalten. Das muss geschehen, wenn Sie mit der Datenbank sprechen (und wird automatisch ausgeführt, wenn Sie das ORM verwenden). 'htmlspecialchars()' wird benötigt, wenn Sie Inhalte ohne Hilfsprogramm ausgeben, z. B. Inline-Formulare ohne Inhalt. z.B. '

Hallo, !

'. – bobince

+3

"Es ist sehr bedauerlich, dass das CakePHP-Tutorial die schlechte Praxis beinhaltet, nicht dekapierte Strings in HTML für Text außerhalb von HTML-Helfern zu spiegeln" Ich stimme zu - auf diese Weise ist vielen nicht bewusst, dass dies wirklich schlecht ist. – mark