Jedes Jahr finden weltweit immer mehr Hackerangriffe statt: von Kreditkartendiebstahl bis hin zu Hacking-Sites von Online-Shops. Sind Sie sicher, dass Ihre Skripte wirklich geschützt sind? Im Vorgriff auf den Start des Kurses „Backend PHP Developer“ hat unser Kollege eine interessante Veröffentlichung zum Thema Sicherheit in PHP ...
Einleitung
Der Facebook- und Cambridge Analytica-Skandal, das Korrespondenzleck der US-Demokratischen Partei im Jahr 2016, der Datenverstoß von Google im Jahr 2018 und der Yahoo Voice-Hack im Jahr 2012 sind nur einige Beispiele für die in den letzten Jahren festgestellten schwerwiegenden Mängel.
Informationen auf globaler Ebene stehen uns jetzt wie nie zuvor zur Verfügung. Wenn Sie nicht sorgfältig vorgehen, sind Informationen über uns (einschließlich vertraulicher Informationen) möglicherweise auch gemeinfrei.
Es spielt keine Rolle, welche Art von Projekt Sie entwickeln: ein Open-Source-Kinderspiel oder die Ausführung eines Auftrags von einem großen Unternehmen. Als Webentwickler sind Sie dafür verantwortlich, Sicherheit für alle Ihre Plattformen bereitzustellen. Sicherheit ist ein sehr schwieriger Aspekt.
Die PHP-Sprache bietet verschiedene Tools und Funktionen, mit denen Sie die Anwendungssicherheit gewährleisten können.
3 Passwort-Sicherheitsregeln

Benutzerkennwörter sollten Ihnen unbekannt bleiben.
Ich erinnere mich noch an meine ersten Schritte als PHP-Entwickler. Die erste Anwendung, die ich erstellt habe, war ein Spiel, in dem ich zusammen mit meinen Freunden die Rolle des Wolkenkratzerbauers spielte. Jeder von uns konnte sich in sein Konto einloggen, Bauherren kaufen und jede Woche sein Team auf eine neue Baustelle schicken. Ich habe grundlegende Konten erstellt: Ich habe für jeden Benutzer einen Benutzernamen und ein Kennwort hinzugefügt und diese per E-Mail an ihn gesendet. Und erst nach ein paar Monaten wurde mir klar, wie dumm es war.
Grundsätzlich gilt: Sie sollten die Passwörter Ihrer Benutzer nicht nur nicht kennen, sondern auch nicht erkennen können. Dies ist ein sehr schwerwiegender Aspekt, der sogar eine rechtliche Haftung nach sich ziehen kann.Durch Versuch und Irrtum kommen Sie immer noch zu dem Schluss, dass Passwörter nicht im Klartext oder so gespeichert werden müssen, dass sie leicht entschlüsselt werden können.
Geben Sie keine Passwortbeschränkungen ein
Lass uns ein Spiel spielen. Versuchen Sie, das Passwort zu erraten:
**********Schwer, richtig? Lass es uns versuchen:
P * r *** e ***Jetzt wissen Sie, dass es einen Großbuchstaben und einige Großbuchstaben gibt. Und wenn ja:
P * r e911Jetzt können Sie das Kennwort viel einfacher erraten, da Sie wissen, dass es einen Großbuchstaben, Großbuchstaben und eine Zahl enthält.
Dasselbe passiert, wenn Sie Benutzern und Masken Beschränkungen für ihre Passwörter auferlegen. Wenn Ihre Anwendung einem bestimmten Muster folgen muss, geben Sie Eindringlingen Hinweise, die sie gegen Sie verwenden können.
Das Erfordernis einer bestimmten Mindestlänge für das Kennwort ist normal, da sich die Kennwortlänge auf die Zeit auswirkt, die zum Abrufen des Kennworts erforderlich ist. Stattdessen ist es jedoch viel nützlicher herauszufinden, wie Algorithmen und Hashing funktionieren.
Die richtige Antwort auf das obige Rätsel lautet
übrigens „Porsche911“ :)
Senden Sie niemals Passwörter per E-Mail in ihrer reinsten Form
Einer meiner ersten Fehler als Webentwickler war, dass ich nicht im Voraus gelernt habe, wie man Passwörter verwaltet.
Stellen Sie sich vor, Sie sind Kunde und beauftragen einen Entwickler, eine schöne E-Commerce-Website für Ihr Unternehmen zu erstellen. Dieser Entwickler hat Ihnen eine E-Mail gesendet, die das Passwort für Ihre Site enthält. Jetzt wissen Sie drei Dinge über Ihren Mitarbeiter:
- Er kennt dein Passwort.
- Es speichert Ihr Passwort in seiner reinsten Form, ohne Verschlüsselung.
- Er hat nicht die geringste Sorge, wenn er Passwörter über das Internet sendet.
Als Antwort bleibt keine andere Wahl, als einen solchen Mitarbeiter zu entlassen.
Folgendes sollte ein Webentwickler tun:- Erstellen Sie in Ihrer Webanwendung eine Seite, auf der der Benutzer seine E-Mail-Adresse eingeben kann, falls er das Kennwort vergessen hat, und fordern Sie daher ein neues Kennwort an.
- Ihre Anwendung generiert eindeutige Zugriffsrechte und bindet sie an den Benutzer, der die Anforderung gestellt hat (ich persönlich verwende eine universelle individuelle Kennung).
- Die Anwendung sendet dem Benutzer eine E-Mail mit einem Link zum Zugriffsrecht.
Sobald der Benutzer dem Link folgt, bestätigt die Anwendung den korrekten Zugriff und ermöglicht dem Benutzer, das Kennwort zu ändern.
Sehen Sie, wie die Sicherheit der App mit diesen einfachen Schritten gewachsen ist? Auf Wunsch können wir die Sicherheitsstufe noch weiter erhöhen, indem wir ein Zeitlimit zwischen der Anforderung und dem Festlegen eines neuen Kennworts hinzufügen.
Hashing von Benutzerpasswörtern

Kennwörter in einer Webanwendung müssen gehasht und nicht verschlüsselt werden. Die Verschlüsselung ist ein Zwei-Wege-Algorithmus. Die Sequenz ist verschlüsselt, die Sie dann entschlüsseln und wiederverwenden können. Diese Technik wird häufig in der Intelligenz verwendet, um Informationen von Verbündeten zu erhalten.
Hashing legt nahe, dass die Sequenz nicht in Klartext zurückgegeben werden kann. Dies ist das ultimative Ziel des gesamten Prozesses.
Um unterschiedliche Ziele zu erreichen, wurden viele Algorithmen entwickelt: Einige zeichnen sich durch hohe Geschwindigkeit aus, andere sind sehr zuverlässig. Diese Technologie wird ständig weiterentwickelt und hat in den letzten Jahren viele Änderungen erfahren. Nun werden die drei beliebtesten Sorten in chronologischer Reihenfolge betrachtet.
SHA-1
Dies war historisch gesehen die erste Hash-Funktion. Das Akronym SHA-1 steht für "Safe Hashing Algorithm", entwickelt von der US National Security Agency.
SHA-1 war in PHP bekannt und weit verbreitet, um eine 20-Byte-Hexadezimalzeichenfolge mit einer Länge von 40 Zeichen zu erstellen.
Die SSL-Industrie verwendet SHA-1 seit mehreren Jahren für digitale Signaturen. Nachdem Google einige Schwachstellen festgestellt hatte, entschied es sich, auf SHA-2 umzusteigen.
Die erste Version des Algorithmus wurde im Jahr 2005 veraltet. Anschließend wurden neue Versionen entwickelt und für den Einsatz übernommen: SHA-2, SHA-2 und SHA-256.
Bcrypt
Bcrypt, nicht das Ergebnis der natürlichen Entwicklung von SHA, konnte aufgrund seines Sicherheitsniveaus ein breites Publikum anziehen.
Dieser extrem langsame Algorithmus wurde erstellt, um die sichersten Hash-Sequenzen zu erstellen. Beim Hashing von Daten werden mehrere Zyklen durchlaufen, die in der Computertechnologie durch den Indikator der Arbeitskosten beschrieben werden. Je höher die Arbeitsgeschwindigkeit, desto teurer ist es für einen Hacker, ein Passwort zu erhalten.
Es gibt gute Nachrichten: In Zukunft können wir leistungsstärkere Maschinen einsetzen, die schneller mehr Zyklen durchlaufen können.
Argon2
Dies ist ein neuer modischer Hashing-Algorithmus, der von Alex Biryukov, Daniel Dinu und Dmitry Hovratovich von der Universität Luxemburg entwickelt wurde. 2015 gewann er den Password Hashing Contest.
Argon2 wird in 3 Versionen vorgestellt:- Argon2d greift auf ein Array von Speicher zu, wodurch Speicher und Zeitaufwand reduziert werden. Es besteht jedoch die Gefahr, dass er über Drittanbieter-Kanäle angreift.
- Argon2i ist das Gegenteil von Argon 2d. Es ist für Angriffe auf Kanäle von Drittanbietern optimiert und greift passwortunabhängig auf den Speicher zu.
- Argon2id ist eine Zwischenversion zwischen zwei früheren Versionen.
Diese Funktion hat 6 Parameter:
Passwortfolge, Salt, Speicherkosten, Zeitkosten, Parallelitätsfaktor (maximal zulässige Anzahl paralleler Threads), Hash-Länge.Im zweiten Teil des Artikels werde ich Ihnen erklären, wie Sie dieses Hashing in PHP mithilfe der integrierten Funktionen verwenden. Jetzt möchte ich alle zum
kostenlosen Online-Webserver „ServerLess PHP“ einladen, in dem wir uns mit dem Konzept ohne Server vertraut machen, über dessen Implementierung in AWS, Anwendbarkeit und preise. Wir werden die Prinzipien der Montage und des Starts analysieren und einen einfachen TG-Bot auf Basis von AWS Lambda bauen.