00 Stimmen

Nur bestimmten HTML Code zulassen

Frage von Progger99 | 05.12.2011 um 20:32

Ich habe auf meiner Homepage ein Formular, so dass Besucher die Artikel in meinem Blog kommentieren können. Ich möchte den Benutzern jetzt auch die Möglichkeit geben, gewisse Formatierungen und Links zu benutzen.

Allerdings sollen nur bestimmte HTML Tags erlaubt sein, da ich weder möchte, dass Benutzer das Design meiner Homepage zerhauen noch möchte ich dass jemand auf die Idee kommt Scripts oder Schad-Code auf diese Weise einzuschleusen.

Was ich also bräuchte wäre eine Funktion, die Tags wie <a>, <br> oder <p> erlaubt, aber alles andere wie zum Beispiel <script> oder dergleichen herausfiltert. Ich habe mich schon an eine Funktion mit regulären Ausdrücken gewagt, aber irgendwie komme ich da nicht weiter. Kann mir da jemand helfen??

AntwortenPositivNegativDatumStimmen
00 Stimmen

Das Zauberwort heißt strip_tags. Schau mal auf php.net/manual/de/function.strip-tags.php. Da findest du alles wichtige dazu!
07.12.2011 um 13:18

AntwortenPositiv Negativ
11 Stimme

Um es mal ein bisschen genauer zu erklären: Die Funktion strip_tags() erwartet als Parameter einen String und optional die erlaubten Tags. Beispiel:

$s='<p>Wort</p><br><br>';
echo strip_tags($s);
//Ausgabe 1: 'Wort'
echo strip_tags($s,'<p><a>');
//Ausgabe 2: '<p>Wort</p>'

In der Ausgabe 1 sind keine Tags erlaubt, es wird nur 'Wort' ausgegeben. Anders ist es in der zweiten Ausgabe, hier ist der HTML Code <p> und <a> erlaubt. Da der String $s kein <a> enthält aber <p> bleiben alle <p> erhalten. Der Zeilenumbruch <br> wird aber gelöscht, da dieser nicht erlaubt ist. Würde man strip_tags($s, '<p><a><br>') schreiben, wäre auch der Zeilenumbruch <br> erlaubt.
08.12.2011 um 13:06

AntwortenPositiv Negativ
0Beste Antwort0 Stimmen

Achtung! Man sollte sich nicht alleine auf strip_tags verlassen! In einem erlaubten HTML-Tag könnte ein "böser" User mittels onmouseover oder dergleichen schadhaften Code unterbringen. Dieser wird mit strip_tags alleine noch nicht entfernt.

Man kann sich zum Beispiel so behelfen:

//String mit Tags und Schadcode
$txt = '<p class="x" onmouseover="alert(1);">
          Text Text Text <strong>Text</strong>
        </p>';

//Bereinigen
$txt = strip_tags($s,'<p>');
$regex = "#<(/?\w+)\s+[^>]*>#is";
$txt = preg_replace($regex, '<${1}>',$txt);

//Ausgabe
echo $txt; // '<p>Text Text Text Text</p>'

Dieser Code benutzt als erstes strip_tags(), um alle Tags bis auf <p> aus dem String zu löschen. Danach wird ein regulärer Ausdruck benutzt, der alle Attribute aus den Tags löscht. Dadurch verschwindet der onmouseover Befehl aus dem p-Tag, aber auch das, was bei class oder anderen möglicherweise gewollten Attributen angegeben ist. Wenn man bestimmte Attribute wünscht, kann man die Funktion noch entsprechend anpassen.
08.12.2011 um 21:40

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

CSS-Stylesheets in HTML einbinden

Tutorial | 0 Kommentare

PHP: Eine E-Mail versenden

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.