Wir besprechen die Gefahren einer nicht bereinigten Ausgabe und bieten eine sichere Möglichkeit, formatierte Ausgaben anzuzeigen.
Es besteht keine Gefahr, dass die Ausgabe gefiltert wird
Wenn Sie nur Benutzereingaben erhalten und diese dann anzeigen, können Sie Ihre Ausgabeseite beschädigen, z. B. kann jemand in böswilliger Absicht Javascript in das Eingabefeld einbetten, das er übermittelt:
Dies ist mein Kommentar
<script language="javascript:
Alert ('Mach etwas Schlimmes hier!')">.
Selbst wenn der Benutzer nicht böswillig handelt, werden auf diese Weise einige Ihrer HTML-Anweisungen beschädigt, z. B. wenn eine Tabelle plötzlich unterbrochen wird oder die Seite unvollständig angezeigt wird.
Nur unformatierten Text anzeigen
Dies ist die einfachste Lösung. Sie zeigen die vom Benutzer übermittelten Informationen einfach als unformatierten Text an. Verwenden Sie die Funktion htmlspecialchars(), um alle Zeichen in HTML-Kodierung umzuwandeln.
Beispielsweise wird <b> in <b> konvertiert, wodurch sichergestellt wird, dass keine unerwarteten HTML-Tags zu unpassenden Zeiten ausgegeben werden.
Dies ist eine gute Lösung, wenn Ihre Benutzer nur unformatierte Textinhalte interessieren. Aber es wäre besser, wenn Sie ihm eine Möglichkeit zur Formatierung geben würden.
Formatierung mit benutzerdefinierten Markup-Tags
Benutzereigene Tags zur Formatierung
Sie können den Benutzern die Verwendung von [b]...[/b] zur Hervorhebung der Anzeige ermöglichen. .[/i ] Kursivschrift, führen Sie einfach eine einfache Such- und Ersetzungsoperation durch: $output = str_replace("[b]", "<b>",
$output = str_replace("[i]", " <i >", $output);
Noch besser: Wir können dem Benutzer erlauben, einige Links einzugeben. Beispielsweise darf der Benutzer [link="url"]...[/link] eingeben, was wir
zu diesem Zeitpunkt
in eine <a href="">...</a>-Anweisung umwandeln, können wir keine einfache Suche verwenden. Die Ersetzung sollte mithilfe regulärer Ausdrücke erfolgen:
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">' , $output);
Die Ausführung von ereg_replace() besteht darin,
die Zeichenfolge zu finden, in der [link="..."] erscheint, und sie durch <a href="...">
[[:graph:]]
zu ersetzenNicht leere Zeichen. Weitere Informationen zu regulären Ausdrücken finden Sie in den entsprechenden Artikeln.
Die Funktion format_output() in Outputlib.php sorgt für die Konvertierung dieser Tags. Das Gesamtprinzip lautet: China Network Management Alliance bitsCN.com
ruft htmlspecialchars() auf, um HTML-Tags in spezielle Codierungen umzuwandeln, HTML-Tags herauszufiltern, die nicht angezeigt werden sollen. Anschließend konvertieren Sie eine Reihe unserer benutzerdefinierten Tags in entsprechende HTML-Tags.
Bitte sehen Sie sich den Quellcode unten an:
<?php
Funktion format_output($output) {
/********************************************* ************************************
* Nimmt eine Rohzeichenfolge ($output) und formatiert sie für die Ausgabe mit einem speziellen
* Reduziertes Markup, das HTML ähnelt
************************************************** *******************************/
$output = htmlspecialchars(stripslashes($output));
/* neuer Absatz */
$output = str_replace('[p]', '<p>', $output);
/* deutlich */
$output = str_replace('[b]', '<b>', $output);
$output = str_replace('[/b]', '</b>', $output);
/* kursiv */
$output = str_replace('[i]', '<i>', $output);
$output = str_replace('[/i]', '</i>', $output);Netzwerkverwaltung bitscn_com
/* formatiert */
$output = str_replace('[pre]', '<pre>', $output);
$output = str_replace('[/pre]', '</pre>', $output);
/* eingerückte Blöcke (Blockquote) */
$output = str_replace('[indent]', '<blockquote>', $output);
$output = str_replace('[/indent]', '</blockquote>', $output);
/* Anker */
$output = ereg_replace('[anchor="([[:graph:]]+)"]', '<a name="1"></a>', $output);
/* Links, beachten Sie, dass wir versuchen, Javascript in Links zu verhindern */
$output = str_replace('[link="javascript', '[link="javascript', $output);
$output = ereg_replace('[link="([[:graph:]]+)"]', '<a href="1">', $output);
$output = str_replace('[/link]', '</a>', $output);
return nl2br($output);
}
?>
Einige Hinweise:
Denken Sie daran, das benutzerdefinierte Tag zum Generieren der HTML-Tag-Zeichenfolge nach dem Aufruf der Funktion htmlspecialchars() zu ersetzen, nicht vor diesem Aufruf, da sonst Ihre harte Arbeit nach dem Aufruf des Flusses htmlspecialchars() verschwendet wird.
Nach
der Konvertierungdes Netzwerkmanagements bitscn_com
wird der Such-HTML-Code ersetzt. Beispielsweisewerden die doppelten Anführungszeichen durch die Funktion nl2br() in <br>-Tags umgewandelt nach htmlspecialchars() stehen.
Beim Konvertieren von [links=""] in <a href=""> müssen Sie sicherstellen, dass der Einreicher kein Javascript einfügt. Eine einfache Möglichkeit, [link="javascript in [link="" zu ändern. Auf diese Weise wird Nein Ersatz, zeigen Sie einfach den Originalcode an.
Outputlib.php
ruft test.php im Browser auf. Sie können die Verwendung von format_output() sehen.
Ersetzen Sie es durch das folgende spezielle Tag:
- Dies ist [b]bold[/b].
- das ist [i]kursiv[/i]
- das ist [link=" http://www.phpbuilder.com"]ein Link[/link]
– Dies ist ein [anchor="test"]Anker und ein [link="#test"]Link[/link] zum Anker-
[p]Absatz
[pre]Vorformatiert[/pre]
[indent]Interlaced Text[/indent]
Natürlich
können Sie je nach Bedarf weitere Tags hinzufügen. bitsCN@com
Fazit:
Diese Diskussion bietet eine Methode zur sicheren Anzeige von Benutzereingaben Wird in
Message Boards verwendet und schlägt Systemankündigungen
in den folgenden Programmen vor
BBS-System