Eine weitere Grundlage für die Sicherheit von Webanwendungen besteht darin, die Ausgabe zu maskieren oder Sonderzeichen zu kodieren, um sicherzustellen, dass die ursprüngliche Bedeutung unverändert bleibt. Beispielsweise muss O'Reilly an O'Reilly maskiert werden, bevor es an die MySQL-Datenbank gesendet wird. Der Backslash vor dem einfachen Anführungszeichen bedeutet, dass das einfache Anführungszeichen Teil der Daten selbst ist und nicht ihre ursprüngliche Bedeutung.
Das Ausgabe-Escape, auf das ich mich beziehe, ist in drei Schritte unterteilt:
l Erkennen der Ausgabe
l kann zwischen maskierten und nicht maskierten Daten unterscheiden 🎜> Es ist notwendig, nur gefilterte Daten zu maskieren. Obwohl Escape viele häufige Sicherheitslücken verhindert, ist es kein Ersatz für die Eingabefilterung. Verunreinigte Daten müssen zuerst gefiltert und dann maskiert werden.
Wenn Sie die Ausgabe maskieren, müssen Sie zunächst die Ausgabe identifizieren. Dies ist oft viel einfacher als das Erkennen von Eingaben, da es auf den von Ihnen ausgeführten Aktionen basiert. Wenn Sie beispielsweise die Ausgabe des Clients erkennen, können Sie im Code nach den folgenden Anweisungen suchen: >
Als Anwendungsentwickler müssen Sie es wissen Jeder Ort, der an externe Systeme ausgibt. Sie bilden den Output.
Wie beim Filtern variiert auch der Escape-Prozess je nach Situation. Die Filterung ist je nach Datentyp unterschiedlich und die Escape-Maßnahme erfolgt je nach dem System, an das Sie die Informationen übertragen.
In PHP stehen integrierte Funktionen zum Escapen einiger gängiger Ausgabeziele zur Verfügung, darunter Clients, Datenbanken und URLs. Wenn Sie Ihren eigenen Algorithmus schreiben, ist es wichtig, narrensicher zu sein. Es ist notwendig, eine zuverlässige und vollständige Liste der Sonderzeichen im Fremdsystem und deren Darstellung zu finden, damit die Daten erhalten bleiben und nicht übersetzt werden.
echo print printf <?=
Um zu unterscheiden, ob die Daten maskiert wurden, empfehle ich dennoch, einen Benennungsmechanismus zu definieren. Für die Ausgabe der maskierten Daten an den Client verwende ich das Array $html zur Speicherung. Die Daten werden zunächst in einem leeren Array initialisiert, um alle gefilterten und maskierten Daten zu speichern.
CODE:
Tipps
htmlspecialchars()-Funktion und htmlentities( )-Funktionen sind grundsätzlich gleich, ihre Parameterdefinitionen sind genau gleich, außer dass die Escape-Funktion von htmlentities() gründlicher ist.
Durch die Ausgabe des Benutzernamens an den Client über $html['username'] können Sie sicherstellen, dass die Sonderzeichen vom Browser nicht falsch interpretiert werden. Wenn der Benutzername nur Buchstaben und Zahlen enthält, ist ein Escapen eigentlich nicht notwendig, aber dies spiegelt den Grundsatz der Tiefenverteidigung wider. Es ist eine sehr gute Angewohnheit, sich jeglicher Ausgabe zu entziehen und kann die Sicherheit Ihrer Software erheblich verbessern.
<?php $html = array( ); $html['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8'); echo "<p>Welcome back, {$html['username']}.</p>"; ?>
Das folgende Beispiel veranschaulicht die korrekte Escape-Technik für MySQL-Datenbanken:
CODE:
<?php $mysql = array( ); $mysql['username'] = mysql_real_escape_string($clean['username']); $sql = "SELECT * FROM profile WHERE username = '{$mysql['username']}'"; $result = mysql_query($sql); ?>
以上就是PHP安全-输出转义的内容,更多相关内容请关注PHP中文网(www.php.cn)!