PHP-Sicherheitsfunktion: strip_tags, filter_var, Md5 und sha1
Mรถgliche Sicherheitsbedrohungen
Im Grunde handelt es sich dabei um zwei Personengruppen, 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 โ Sie geben mรถglicherweise unbeabsichtigt falsche Parameter in Formulare ein, 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 SQL Aussagen.
Dies geschieht entweder รผber Benutzereingabeformulare oder รผber URLs, die Variablen verwenden.
Der angehรคngte Code kommentiert die Bedingung in der WHERE-Klausel einer SQL-Anweisung. Der angehรคngte Code kann auch;
- 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 โ Diese Art von Angriff fรผgt schรคdlichen Code ein, normalerweise JavaSkript. Dies geschieht mithilfe von Benutzereingabeformularen wie Kontakt- und Kommentarformularen. Dies geschieht, um:
- Rufen Sie vertrauliche Informationen ab, z Cookies-Daten
- Leiten Sie den Benutzer zu einer anderen URL weiter.
- Zu den weiteren Bedrohungen kรถnnen gehรถren: PHP-Code-Injektion, Shell-Injektion, E-Mail-Injektion, Offenlegung des Skript-Quellcodes usw.
Best Practices fรผr die PHP-Anwendungssicherheit
Schauen wir uns nun einige der Best Practices fรผr die PHP-Sicherheit an, die wir bei der Entwicklung unserer Anwendungen berรผcksichtigen mรผssen.
PHP-Strip_tags
Die Funktion โstrip_tagsโ entfernt HTML, JavaSkript oder PHP-Tags aus einem String.
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 Benutzern 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 zur URLhttp://localhost/phptuts/comments.php
Nehmen wir an, Sie erhalten Folgendes als Benutzereingabe alert(โYour site sucks!โ);
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo "<h4>My Commenting System</h4>";
echo $user_input;
?>
Navigieren Sie zur URL http://localhost/phptuts/comments.php
Lassen Sie uns nun unsere Anwendung mithilfe der Funktion โstrip_tagsโ vor solchen Angriffen schรผtzen.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo strip_tags($user_input);
?>
Navigieren Sie zur URL http://localhost/phptuts/comments.php
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 Code ist fรผr das Kommentarsystem.
Es verwendet die Funktion filter_var und die Konstante FILTER_SANITIZE_STRIPPED, um Tags zu entfernen.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
?>
Ausgang:
alert('Your site sucks!');
Funktion mysqli_real_escape_string Diese Funktion wird verwendet, um eine Anwendung vor SQL-Injection zu schรผtzen.
Nehmen wir an, wir haben die folgende SQL-Anweisung zum Validieren der Benutzer-ID und des Kennworts.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Ein bรถswilliger Benutzer kann den folgenden Code in das Textfeld fรผr die Benutzer-ID eingeben. ' ODER 1 = 1 โ Und 1234 in das Textfeld fรผr das Kennwort Lassen Sie uns das Authentifizierungsmodul codieren
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
Das Endergebnis wird sein
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
HIER,
- โSELECT * FROM users WHERE user_id =โโ testet auf eine leere Benutzer-ID
- โ'OR 1 = 1โ ist eine Bedingung, die immer wahr sein wird
- โโโ kommentiert den Teil, der auf das Passwort prรผft.
Die obige Abfrage gibt alle Benutzer zurรผck. Verwenden wir jetzt die Funktion mysqli_real_escape_string, um unser Anmeldemodul zu sichern.
<?php
$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");
$pwd = mysqli_real_escape_string("1234");
$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";
echo $sql;
?>
Der obige Code wird ausgegeben
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Hinweis Das zweite einfache Anfรผhrungszeichen wurde fรผr uns maskiert, es wird als Teil der Benutzer-ID behandelt und das Passwort wird nicht kommentiert.
PHP Md5 und PHP sha1
Md5 ist die Abkรผrzung fรผr Message Digest 5 und sha1 ist die Abkรผrzung fรผr Secure Hash Algorithm 1.
Sie werden beide zum Verschlรผsseln von Zeichenfolgen verwendet.
Sobald eine Zeichenfolge verschlรผsselt wurde, ist es mรผhsam, sie zu entschlรผsseln.
Md5 und sha1 sind sehr nรผtzlich beim Speichern von Passwรถrtern in der Datenbank.
Der folgende Code zeigt die Implementierung von md5 und sha1
<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>
Angenommen, Sie haben die Datei hashes.php im Ordner phptuts gespeichert, navigieren Sie zur URL
Wie Sie anhand der obigen Hashes sehen kรถnnen, kennt ein Angreifer, wenn er Zugriff auf Ihre Datenbank erhรคlt, immer noch nicht die Passwรถrter, mit denen er sich anmelden kann.
Zusammenfassung
- Unter Sicherheit versteht man Maรnahmen, die zum Schutz einer Anwendung vor versehentlichen und bรถswilligen Angriffen ergriffen werden.
- Die Funktion โstrip_tagsโ wird zum Entfernen von Tags wie z. B. verwendet aus Eingabedaten
- Die Funktion filter_var validiert und bereinigt PHP-Eingabedaten
- mysqli_real_escape_string wird verwendet, um SQL-Anweisungen zu bereinigen. Es entfernt schรคdliche Zeichen aus den Anweisungen
- Sowohl MD5 als auch SHA1 werden zum Verschlรผsseln des Passworts verwendet.




