Verbessern Sie die Sicherheit unserer Anwendungen mit PHP

Inhaltsverzeichnis
PHP entstand als vielseitige Sprache, die es uns ermöglicht, die über ein Formular eingegebenen Daten zu manipulieren HTMLNatürlich gibt es in seiner Verfassung mehr Werkzeuge und Fähigkeiten als nur diese.
Die Vielseitigkeit und Benutzerfreundlichkeit machen es zu einer der weltweit am häufigsten verwendeten Sprachen für Webprojekte, die von einfachen Kontaktformularen bis hin zur Basis für große Anwendungen am Anfang reichen, wie z Facebook.
Das Problem bei der Vielseitigkeit und Benutzerfreundlichkeit besteht darin, dass der Entwickler nicht gezwungen ist, sicheren Code zu schreiben, sondern bei sehr unsicheren Funktionen der Code perfekt läuft, und hier kommen die Probleme.
Die Sicherheit von Webanwendungen ist etwas, das Sie nicht von Anfang an haben PHPDies macht es jedoch nicht zu einer unsicheren Sprache, da Sicherheit einer Reihe von Techniken und Arbeitsstilen entspricht, die ein Programmierer kennen muss, um sie auf seine Skripte anzuwenden.
FrameworksEs ist wahr, dass mit dem Erscheinen von Rahmen Viele Sicherheitsfunktionen sind standardmäßig enthalten, aber nicht jeder Entwickler verwendet a Rahmen in älteren Anwendungen und es ist möglich, dass für einige Funktionen a Rahmen ein Überschuss sein.
Die Schlüssel für die Sicherheit unserer Anwendungen mit PHP Sie sind: Kontrolle und Verfeinerung der Daten, die der Benutzer in das Formular eingibt, Überprüfung der Herkunft der Anfragen HTTP die unsere Anwendung erhält, und vermeiden schließlich die direkte Ausführung von Weisungen durch Formulare.
Es gibt eine Regel in der Programmierung und sie ist universell, d.h. sie gilt nicht nur für PHPEs ist so, dass alle Daten, die nicht von der Anwendung generiert werden, potenziell bösartig sind. Dies bedeutet, dass wir nicht vertrauen können, wenn es sich nicht um ein von uns programmiertes Ergebnis handelt.
Dieses Prinzip gilt für Formularwerte, Dateien, Datenbanken, daher besteht ein erster Schritt zur Verbesserung unserer Sicherheit darin, Daten zu filtern, wenn wir mit diesen Elementen interagieren müssen.
Wir werden einige der Best Practices auflisten, die wir anwenden können, wenn wir die in unser Formular eingegebenen Daten filtern:
Verwenden Sie Listen mit zulässigen WertenMit dieser Praxis wissen wir, dass, wenn die Daten, die über das Formular eingehen, unsere Liste der zulässigen und sicheren Werte nicht durchlaufen, es nicht zur Verarbeitung gehen sollte. An dieser Stelle muss dem Benutzer eine Nachricht zur Korrektur seiner Daten gesendet werden.
Korrigieren Sie niemals ungültige DatenEs mag verlockend klingen, ein sehr intelligentes System zu entwickeln, das Daten mit Inkonsistenzen korrigiert, aber auf lange Sicht kann dies zu Problemen und Schwachstellen führen. Wenn wir etwas Unregelmäßiges entdecken, sollten wir es nicht verarbeiten.
Namenskonvention verwendenMit dieser Praxis können wir die sicheren Daten und Werte von den vom Benutzer eingegebenen Daten und Werten unterscheiden, damit werden wir innerhalb der Programmierung die Verwendung ersterer für die Verarbeitung verstärken.
Es gibt zwei arten der filterung was wir tun können, der erste von Werten, die wir kennen, und der zweite von Werten, die wir nicht kennen.
Das erste Es ist sehr einfach, wir müssen nur Routinen mit Listen bekannter Elemente ausführen und damit vergleichen, aber dies ist in größeren Anwendungen umständlich und schwierig durchzuführen. Das zweite Dies impliziert das Erstellen von Routinen, die die Struktur des Werts auswerten, und wenn er dem entspricht, den wir als sicher erachten, lassen wir ihn zur Verarbeitung gehen, andernfalls geben wir einen Fehler aus, da dies von dynamischer Natur ist, ist dies das empfohlene Format.
Sehen wir uns unten einen Beispielcode für den ersten Filtertyp an:
Im folgenden Code sehen wir, wie wir ein Formular mit einem Element erstellen auswählen Damit der Benutzer eine Farbe auswählt, da der Benutzer die Daten zur Eingabe nicht direkt schreiben muss, können wir den Fehler machen, die Informationen nicht zu validieren, aber dies bedeutet nur, dass wir eine Sicherheitslücke haben, da mit einem Formular, das gilt gleichen Namen können wir potenziell gefährliche Informationen erhalten.
Deshalb ist der Wert des Formulars einmal durchgesendet POST, wertet unser Skript die möglichen Werte aus, und falls einer der erwarteten Werte vorliegt, übergeben wir ihn an unser Array sicherer Werte, wie wir unten sehen.

Damit haben wir das Problem auf einfache Weise gelöst, aber wenn die Liste anstelle von drei Farben hundert gehabt hätte, wäre die Geschichte der Einfachheit eine andere gewesen.
Im folgenden Beispiel werden wir ein vom Benutzer eingegebenes Feld in geeigneter Weise dynamisch validieren, dafür müssen wir verwenden Reguläre Ausdrücke und vermeiden Sie auf diese Weise die Eingabe von Zeichen, die unsere Verarbeitung gefährden, bewerten Sie auch die Größe der Eingabe und vermeiden Sie so Überlauf oder Überlastung unseres Datentyps bei der Verarbeitung des Programms. Sehen wir uns den Code im Bild an:

VERGRÖSSERN

Hier besteht der Schlüssel zur Validierung darin, richtig zu wissen, was wir verarbeiten möchten, zum Beispiel im Fall eines Benutzernamens fragen wir normalerweise nach alphanumerischen Zeichen und Bindestrichen regulärer Satz Wir validieren dies, wir brauchen es auch größer als 0 Zeichen und maximal 32, wenn das, was der Benutzer eingibt, all dies erfüllt, besteht es die Validierung, das Beste ist, dass dies mit einem Wert wie funktioniert hundert, da es total dynamisch ist.
Eine weitere Bedrohung, gegen die wir uns schützen müssen, ist die Ausführung von Skripten von anderen Seiten dank AJAX Wir können Formulare vom Client an eine Route senden, einschließlich der Art der Anfrage und der gewünschten Werte.
SchwachstelleDiese Art von Schwäche macht es für jemanden sehr einfach, unser Formular zu inspizieren und unsere Felder zu überprüfen, wenn man diese Namen und die Methode besitzt HTTP Versuchen Sie, unsichere Werte zu senden, um dies zu vermeiden, müssen wir Techniken anwenden, die es uns ermöglichen, zu überprüfen, woher die Anforderung kommt und ob es sicher ist, ihre Ausführung zuzulassen, andernfalls vermeiden Sie es, den Pfad innerhalb unseres Programms fortzusetzen.
Um dieses Problem zu vermeiden, ist ein System von Token Ja Sitzungen, damit wir beim Absenden des Formulars prüfen, ob die Sitzung mit der auf sichere Weise hergestellten Sitzung übereinstimmt und der böswillige Benutzer daher nicht fortfahren kann.
Ein wesentliches Ziel eines Angreifers ist es, seinen Code in unsere Umgebung einfügen zu können, dazu verwenden sie Code-Injections SQL, dieser Angriff ist bekannt als SQL-Injektion, wobei wir bei ungesicherten Formularen und unsachgemäßer Verarbeitung möglicherweise Anweisungen erhalten SQL direkt ohne Grenzen. Zum Beispiel, wenn unsere Bewertung SQL ist folgendes in unserem Skript PHP:

Wir können jeden Benutzer des Systems als Benutzernamen und für die Passwort Wir verwenden zwei Skripte “--” damit können wir die Sicherheit ohne Probleme passieren, da zwei Skripte ein Kommentar sind SQL und daher wird das Passwort nicht ausgewertet.
Der richtige Weg eine SQL auswerten die vom Benutzer stammt, entfernt die Sonder- und gefährlichen Zeichen und wertet nur sichere Ausdrücke aus. Sehen wir uns unten ein Beispiel an, wie Sie den vorherigen Fall vermeiden können:
Das erste, was wir tun müssen, ist a Datenbereinigung, das heißt, verhindere, dass es rein von der Form zu unserem gelangt SQL; Die zweite Sache, die wir auswerten müssen, ist, dass, wenn die beiden Werte entsprechen, um Zugriff zu gewähren, letzterer jedoch der Logik jedes einzelnen entspricht, sehen wir uns im Bild an, wie wir das Ziel erreichen:

VERGRÖSSERN

Hier haben wir das Tool verwendet vorbereitete Aussagen was uns die Buchhandlung erlaubt gU zum Anschluss an Datenbank, damit erreichen wir, dass das Eingegebene nie in einen anderen Kontext genommen wird, der keine Daten ist, wir sehen das auch, anstatt die Methode zu verwenden POST Wir haben unser sicheres Array verwendet, das bedeutet, dass unsere Daten bereits verifiziert sind, daher ist das Risiko geringer.
Damit haben wir dieses Tutorial abgeschlossen, da wir sehen, dass die Maßnahmen, die wir ergreifen können, um unsere Anwendung sicherer zu machen, einfach sind, keinen menschlichen Aufwand erfordern, uns jedoch helfen, die häufigsten und vielleicht die häufigsten Angriffe zu vermeiden . sind gegeben. Es gibt eine schlechte Wahrnehmung über PHP derjenigen, die sagen, dass es sich um eine unsichere Sprache handelt, aber die Realität ist, dass Unsicherheit vom Programmierer erzeugt wird, da die Sprache nur über Werkzeuge verfügt, die wir verwenden können, um Angriffe auf unsere Anwendungen durch vom Benutzer eingegebene Daten zu verbessern und zu verhindern.
wave wave wave wave wave