PHP-Master, 8 Practices Ihre Web-App zu sichern

Wenn es um die Anwendungssicherheit, zusätzlich zu Ihrer Hardware und Plattform zu sichern, müssen Sie auch Ihren Code sicher schreiben. Dieser Artikel erklärt, wie Sie Ihre Anwendung sicher zu halten und weniger anfällig für Hacker. Im Folgenden sind die besten Gewohnheiten, die ein Programmierer entwickeln kann, um seine oder ihre Anwendung vor Angriffen zu schützen:

  • Eingangsdatenvalidierung
  • Schutz vor XSS-Angriffe
  • Schutz vor CSRF-Attacken
  • Verhindern von SQL-Injection-Angriffe
  • Der Schutz des Dateisystems
  • Der Schutz von Sitzungsdaten
  • Die richtige Fehlerbehandlung
  • Wach-Dateien enthalten

Eingangsdatenvalidierung

Während Ihre Anwendung entwerfen, sollten Sie Ihre Anwendung gegen schlechten Eingang zu schützen streben. Als Faustregel zu folgen, ist dies: nicht Benutzereingaben vertrauen. Obwohl Ihre App für gute Menschen gedacht ist, gibt es immer eine Chance, dass einige schlechte Benutzer versuchen, Ihre App durch Eingabe schlechten Eingang zu attackieren. Wenn Sie immer die eingehenden Daten validieren und filtern, können Sie eine sichere Anwendung erstellen.

Absicherungen von XSS-Angriffe

Um Ihre Anwendung von diesen Arten von Angriffen, führen Sie die Eingabedaten durch strip_tags () zu schützen alle Tags in ihm vorhanden zu entfernen. Wenn die Daten im Browser zeigt, gelten htmlentities () Funktion auf die Daten.

Absicherungen von CSRF-Angriffe

Idealerweise GET-Anfragen in der Natur idempotent sind. Idempotenz bedeutet, dass die gleiche Seite ohne mehrfach zugegriffen werden kann Nebenwirkungen zu verursachen. Daher sollten GET-Anfragen verwendet werden, nur für den Zugriff auf Informationen und nicht für Transaktionen durchführen.

Das folgende Beispiel zeigt ein wie eine schlecht codierte Anwendung unterstützt unwissentlich CSRF-Attacken:

Nehmen wir an, Bob eine CSRF-Angriff auf Alice ausführen möchte, und erstellt eine URL wie folgt aus und sendet sie an Alice in einer E-Mail:

Der Browser kann kein Bild angezeigt werden wie erwartet, aber es wird immer noch die Anforderung der URL vornehmen kann, die eine Transaktion machen, ohne Alice zu benachrichtigen.

Die Lösung ist eine beliebige Funktion zu verarbeiten, die den Datenbankstatus in POST-Anforderung ändert, und vermeiden $ _REQUEST verwenden. Verwenden Sie $ _GET GET-Parameter abzurufen, und verwenden Sie $ _POST POST-Parameter abzurufen.

Darüber hinaus sollte es ein zufälliges Token eines CSRF-Token mit jeder POST-Anforderung zugeordnet genannt werden. Wenn der Benutzer-Logins in sein / ihr Konto, sollte die Anwendung ein zufälliges Token generieren und speichern sie in der Sitzung. Immer dann, wenn jede Form des Benutzer angezeigt wird, sollten die Token in der Seite als verstecktes Eingabefeld vorhanden sein. Anwendungslogik muss für die Token überprüfen und sicherzustellen, dass er das Token in der Sitzung übereinstimmt.

Verhindern von SQL-Injection-Attacken

Um Ihre Datenbank-Abfragen durchführen, sollten Sie die Verwendung PDO sein. Mit parametrisierte Abfragen und vorbereiteten Anweisungen, können Sie SQL-Injection verhindern.

Werfen Sie einen Blick auf das folgende Beispiel:

In dem obigen Code bieten wir die genannten Parameter: Name und: Alter () vorzubereiten. die informiert die Datenbank-Engine, um die Abfrage im Voraus zusammenstellen und die Werte der genannten Parameter später zu befestigen. Wenn der Anruf () ausführen durchgeführt wird, wird die Abfrage mit den tatsächlichen Werten der genannten Parameter ausgeführt. Wenn Sie auf diese Weise kodieren, kann der Angreifer nicht bösartige SQL injizieren als die Abfrage bereits kompiliert und Ihre Datenbank wird sicher sein.

Der Schutz des Dateisystems

Als Entwickler sollten Sie immer Ihren Code so schreiben, dass keine Ihrer Operationen Dateisystem gefährden. Betrachten Sie das folgende PHP, die eine Datei herunterlädt nach einem Benutzer gelieferten Parameter:

Das Skript ist sehr gefährlich, da es Dateien aus einem beliebigen Verzeichnis dienen kann, die ihm zugänglich ist, wie die Session-Verzeichnis und Systemverzeichnisse. Die Lösung ist das Skript, um sicherzustellen, versucht nicht, Dateien aus beliebigen Verzeichnissen zuzugreifen.

Der Schutz von Sitzungsdaten

Standardmäßig ist die Sitzungsinformationen in ein temporäres Verzeichnis geschrieben. Im Falle eines Shared-Hosting-Server, jemand anderes als Sie können ein Skript schreiben und Sitzungsdaten leicht zu lesen. Daher sollten Sie nicht in einer Sitzung sensible Informationen wie Passwörter oder Kreditkartennummern halten.

Eine gute Möglichkeit, Ihre Sitzungsdaten zu schützen ist, die Informationen in der Sitzung gespeichert zu verschlüsseln. Dies löst nicht das Problem vollständig, da die verschlüsselten Daten nicht völlig sicher ist, aber zumindest die Informationen nicht lesbar. Sie sollten auch Ihre Sitzungsdaten gespeichert irgendwo anders, wie eine Datenbank betrachten zu halten. PHP bietet eine Methode namens session_set_save_handler (), die verwendet werden können, Daten in der Sitzung in Ihrem eigenen Weg zu beharren.

Ab PHP 5.4 Sie ein Objekt vom Typ SessionHandlerInterface passieren kann session_set_save_handler (). Überprüfen Sie die PHP-Dokumentation, um zu erfahren über benutzerdefinierte Sitzungspersistenz Implementierung von SessionHandlerInterface implementieren.

Die richtige Fehlerbehandlung

Im Produktionsmodus müssen wir display_errors und display_start_up_errors Einstellungen deaktivieren. error_reporting und log_errors sollte eingeschaltet sein, damit wir Fehler protokollieren können, während diejenigen von Endbenutzern zu verbergen.

Sie können set_error_handler verwenden, um benutzerdefinierte Fehlerbehandlungsroutinen zu definieren. Es hat jedoch Grenzen. Die benutzerdefinierte Fehlerbehandlung umgeht die Standardfehlerbehandlung Mechanismus von PHP. Es kann nicht Fehler wie E_CORE_ERROR fangen. E_STRICT oder E_COMPILER_ERROR in der gleichen Datei wird der Fehler-Handler in definiert. Darüber hinaus ist es fehl, Fehler zu behandeln, die sich innerhalb des Handler auftreten könnten.

So behandeln Sie Fehler elegant sollten Sie Ausnahme führen durch Versuch Handhabung / catch-Blöcke. Ausnahmen werden durch die Exception-Klasse und ihre Unterklassen vertreten. Wenn ein Fehler innerhalb des try-Blockes auftritt, kann man eine Ausnahme und verarbeitet es in dem catch-Block werfen.

GUARDING enthaltene Dateien

PHP-Skripte enthalten oft andere PHP-Dateien, die sich wie eine Verbindung zu einem Datenbank-Code für Dinge enthalten, usw. Einige Entwickler die enthaltenen Dateien eine Erweiterung wie .inc geben. Dateien mit dieser Erweiterung von PHP nicht standardmäßig analysiert, ob direkt aufgerufen und wird als Klartext an die Benutzer bedient werden. Wenn ein Angreifer greift direkt auf die Datei enthalten, die Datenbank-Anmeldeinformationen enthält, hat er nun Zugriff auf alle Ihre Anwendungsdaten. Verwenden Sie immer die Endung .php für enthalten Code-Dateien und halten Sie sie außerhalb der Verzeichnisse direkt den Nutzern zugänglich.

Indem die oben genannten acht Punkte im Auge ist es möglich, eine PHP-Anwendung zu einem großen Teil zu sichern. Der beste Ratschlag ist bei weitem nicht von Benutzereingaben vertrauen, sondern auch sicher sein, als auch das Dateisystem und Datenbank zu schützen.

In Verbindung stehende Artikel