PHP-Sicherheitsfunktion: strip_tags, filter_var, Md5 und sha1

⚡ Intelligente Zusammenfassung

PHP-Sicherheit schützt Webanwendungen vor Angreifern und unachtsamen Eingaben durch Validierung, Bereinigung und sichere Speicherung von Daten. Diese Anleitung behandelt die wichtigsten Bedrohungen und zeigt anschließend die Funktionen `strip_tags`, `filter_var` und `esca`.pingund moderne Passwort-Hashing-Verfahren mit password_hash zum Schutz vor XSS, SQL-Injection und gestohlenen Zugangsdaten.

  • 🛡️ Kennen Sie die Bedrohungen: Die Hauptrisiken sind SQL-Injection, Cross-Site-Scripting und Code-Injection, die üblicherweise über Formulare oder URL Parameter.
  • 🧹 Strip-Tags: strip_tags entfernt HTML, JavaSkripte und PHP-Tags aus der Eingabe werden entfernt, wodurch das Risiko von gespeicherten Cross-Site-Scripting-Angriffen verringert wird.
  • ✅ Eingabe validieren: filter_var validiert und bereinigt Daten und bestätigt, dass ein Wert den erwarteten Typ hat, bevor Ihr Code ihm vertraut.
  • 🔒 Flucht oder Fesselung: mysqli_real_escape_string maskiert die Abfrageeingabe, aber parametrisierte vorbereitete Anweisungen bieten einen stärkeren Schutz gegen SQL-Injection.
  • 🔑 Passwörter richtig hashen: Speichern Sie Passwörter niemals mit MD5 oder SHA1; verwenden Sie stattdessen password_hash und password_verify, die langsames, gesalzenes bcrypt-Hashing anwenden.
  • 💡 Verteidigung in der Tiefe: Validierung kombinieren, Eskalationping, HTTPS und Datenbankkonten mit minimalen Berechtigungen anstatt sich auf eine einzige Kontrollinstanz zu verlassen.
  • 🤖 KI-Assistent: KI-Tools können PHP-Code auf Sicherheitslücken überprüfen und helfen, SQL-Injection- oder XSS-Schwachstellen sicher zu beheben.

PHP-Sicherheit

Mögliche Sicherheitsbedrohungen

Grundsätzlich gibt es zwei Gruppen von Personen, die Ihr System angreifen können:

  • Hacker – mit der Absicht, sich Zugriff auf nicht autorisierte Daten zu verschaffen oder die Anwendung zu stören
  • Benutzer können versehentlich falsche Parameter in Formularen eingeben, was negative Auswirkungen auf eine Website oder Webanwendung haben kann.

Vor den folgenden Angriffsarten müssen wir uns in Acht nehmen.

SQL Injection – Bei dieser Art von Angriff wird schädlicher Code angehängt an SQL Aussagen.

Dies geschieht entweder mithilfe von Benutzereingabeformularen oder URLs, die Variablen verwenden.

Der angehängte Code kommentiert die Bedingung in der WHERE-Klausel einer SQL-Anweisung aus. Der angehängte Code kann außerdem:

  • Fügen Sie eine Bedingung ein, die immer wahr ist
  • Daten aus einer Tabelle löschen
  • Daten in einer Tabelle aktualisieren

Diese Art von Angriff wird normalerweise verwendet, um sich unbefugten Zugriff auf eine Anwendung zu verschaffen.

Cross-Site-Scripting (XSS) – Bei dieser Art von Angriff wird schädlicher Code eingeschleust, normalerweise JavaSkript. Dies geschieht mithilfe von Benutzereingabeformularen wie Kontaktformularen und Kommentarformularen. Dies dient folgenden Zwecken:

  • Rufen Sie vertrauliche Informationen ab, z Cookie-Daten
  • Leiten Sie den Benutzer auf eine andere Seite weiter URL.

Weitere Bedrohungen können PHP-Code-Injection, Shell-Injection, Email-Injection und die Offenlegung von Skriptquellcode umfassen.

Best Practices für die PHP-Anwendungssicherheit

Betrachten wir nun einige der besten Sicherheitspraktiken für PHP, die wir bei der Entwicklung berücksichtigen müssen.ping unsere Anwendungen.

PHP-Strip_tags

Die Funktion strip_tags entfernt HTML-Code. JavaSkriptoder PHP-Tags aus einer Zeichenkette.

Diese Funktion ist nützlich, wenn wir unsere Anwendung vor Angriffen wie Cross-Site-Scripting schützen müssen.

Betrachten wir eine Anwendung, die Kommentare von Nutzern akzeptiert.

<?php
 
$user_input = "Your site rocks";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Vorausgesetzt, Sie haben comments.php im Ordner phptuts gespeichert, navigieren Sie zu URL http://localhost/phptuts/comments.php

PHP-Strip_tags

Nehmen wir an, Sie erhalten folgende Benutzereingabe: alert(‘Your site sucks!’);

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Navigieren Sie zu URL http://localhost/phptuts/comments.php

PHP-Strip_tags

Lassen Sie uns nun unsere Anwendung mithilfe der Funktion strip_tags vor solchen Angriffen schützen.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Navigieren Sie zu URL http://localhost/phptuts/comments.php

PHP-Strip_tags

PHP filter_var-Funktion

Die Funktion filter_var wird zum Validieren und Bereinigen von Daten verwendet.

Bei der Validierung wird überprüft, ob die Daten vom richtigen Typ sind. Eine numerische Validierungsprüfung für eine Zeichenfolge gibt ein falsches Ergebnis zurück.

Durch die Sanierung werden illegale Zeichen aus a entfernt Schnur.

Die vollständige Referenz finden Sie unter diesem Link: filter_var

Der folgende Code dient dem Kommentarsystem. Er verwendet die Funktion filter_var und die Konstante FILTER_SANITIZE_STRIPPED, um Tags zu entfernen.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
 
?>

Ausgang:

alert('Your site sucks!');

Hinweis: Die Funktion FILTER_SANITIZE_STRIPPED (ein Alias ​​für FILTER_SANITIZE_STRING) ist ab PHP 8.1 veraltet. Verwenden Sie für neuen Code strip_tags() oder, für eine sichere Darstellung, htmlspecialchars().

PHP mysqli_real_escape_string

Die Funktion mysqli_real_escape_string wird verwendet, um eine Anwendung vor SQL-Injection zu schützen.

Nehmen wir an, wir haben die folgende SQL-Anweisung zur Validierung der Benutzer-ID und des Passworts.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Ein böswilliger Benutzer kann sich einloggen ' ODER 1 = 1 — im Feld für die Benutzer-ID und im Feld für das Passwort 1234. Nun zum Authentifizierungsmodul.

<?php
 
$uid = "0$uid1$pwd';";
 
echo $sql;
 
?>

Das Endergebnis wird sein:

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

HIER,

  • „WHERE uid = ”“ prüft, ob eine Benutzer-ID leer ist.
  • „' ODER 1 = 1“ ist eine Bedingung, die immer wahr sein wird.
  • „–“ kommentiert den Teil aus, der das Passwort überprüft.

Die obige Abfrage gibt alle Benutzer zurück. Um unser Anmeldemodul abzusichern, verwenden wir nun die Funktion `mysqli_real_escape_string`. Beachten Sie, dass diese Funktion im realen Code die Datenbankverbindung als erstes Argument benötigt.

<?php
 
$uid = mysqli_real_escape_string($conn, "0$uid1$pwd';";
 
echo $sql;
 
?>

Der obige Code erzeugt folgende Ausgabe:

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Hinweis: Das zweite einfache Anführungszeichen wurde maskiert, daher wird es als Teil der Benutzerkennung behandelt und das Passwort wird nicht auskommentiert.

Best Practice: Köderping Das hilft zwar, aber parametrisierte vorbereitete Anweisungen in mysqli oder PDO sind die empfohlene Verteidigung gegen SQL-Injection, da die Daten niemals in den Abfragetext eingemischt werden.

PHP Md5 und PHP sha1

MD5 ist die Abkürzung für Message Digest 5 und SHA1 die Abkürzung für Secure Hash Algorithm 1. Beide sind Einweg-Hashfunktionen.

Der folgende Code zeigt die Implementierung von md5 und sha1.

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

Vorausgesetzt, Sie haben die Datei hashes.php im Ordner phptuts gespeichert, navigieren Sie zu folgendem Pfad: URL.

PHP Md5 und PHP sha1

Wichtig: MD5 und SHA1 sind schnelle, ungesalzene Hashfunktionen und sind wird nicht mehr als sicher für die Speicherung von Passwörtern angesehen.Da sie mit moderner Hardware und Rainbow-Tabellen schnell geknackt werden können, verwenden Sie sie nur für nicht sicherheitsrelevante Prüfsummen und nutzen Sie für Passwörter die unten beschriebene Methode.

Wie man Passwörter in PHP sicher hasht

Für die Passwortspeicherung bietet PHP die Funktionen `password_hash` und `password_verify`. Diese verwenden einen langsamen, gesalzenen Algorithmus (standardmäßig `bcrypt`), sodass jeder Hash einzigartig und schwer zu knacken ist, selbst wenn Ihre Datenbank gestohlen wird.

<?php
// Hash a password before storing it in the database
$hash = password_hash("mypassword", PASSWORD_DEFAULT);
 
// Verify the password when the user logs in
if (password_verify("mypassword", $hash)) {
    echo "Password is valid";
} else {
    echo "Invalid password";
}
?>
  • password_hash() Erzeugt einen gesalzenen Hash zur Speicherung in der Datenbank; PASSWORD_DEFAULT sorgt dafür, dass der aktuell empfohlene Algorithmus beibehalten wird.
  • Passwortverifizierung() Prüft einen Anmeldeversuch anhand des gespeicherten Hashwerts, ohne diesen jemals zu entschlüsseln.

Da Salt und Algorithmus im Hash gespeichert sind, müssen Sie diese nie selbst verwalten. Dies ist die korrekte und zukunftssichere Methode, Passwörter in PHP zu handhaben.

Häufig gestellte Fragen

Verwenden Sie vorbereitete Anweisungen mit gebundenen Parametern in mysqli oder PDO. Diese senden die Abfrage und die Daten separat, sodass Benutzereingaben die Abfragestruktur niemals verändern können. Dies ist sicherer als die manuelle Eskalation.ping Eingang.

`strip_tags` entfernt HTML- und PHP-Tags vollständig, während `htmlspecialchars` sie in sichere Entitäten umwandelt, sodass sie als Text angezeigt werden. Für die Ausgabe escaping Im Hinblick auf XSS ist htmlspecialchars in der Regel die sicherere Wahl.

Generieren Sie pro Sitzung ein eindeutiges CSRF-Token, betten Sie es als verstecktes Feld in jedes Formular ein und überprüfen Sie es beim Absenden. Weisen Sie alle Anfragen zurück, deren Token fehlt oder nicht mit dem gespeicherten Wert übereinstimmt.

Ja. KI kann SQL-Injection-Angriffe, XSS-Schwachstellen, unsicheres Passwort-Hashing und unsichere Dateiverarbeitung erkennen, die jeweiligen Risiken erläutern und Lösungsvorschläge unterbreiten. Betrachten Sie dies als hilfreichen ersten Schritt, nicht als Ersatz für eine Sicherheitsüberprüfung.

Ja. Fügen Sie den anfälligen Code ein, und die KI kann ihn mit vorbereiteten Anweisungen umschreiben und die Ausgabe eskalieren lassen.pingund die Eingabevalidierung. Testen Sie den korrigierten Code und bestätigen Sie die Korrektur anhand der ursprünglichen Angriffseingabe.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: