TinyMCE schadcode kontrolle

  • Themenstarter Themenstarter ByeBye 177919
  • Beginndatum Beginndatum
B

ByeBye 177919

Hey,

ich hab mir ein Gästebuch gescriptet. Funktioniert auch Prima.

Nur ist mir nach 5 Minuten ja eingefallen das man ja theoretisch jeden Code reinschreiben könnte und dieser würde dann ausgeführt werden (was auch stimmte, hab es mit echo("text"); getestet).

Nach ein wenig Google hab ich dann von TinyMCE erfahren. Und siehe da, es geht nicht mehr. Der Code wird nicht mehr ausgeführt sondern nur in Klartext angezeigt.

Doch ich hab erfahren das TinyMCE nur die Textarea erweitert, nicht ersetzt.

Deswegen hab ich es mal wieder Probiert und bei mir Java deaktiviert. Und siehe da, die normale Textbox ist wieder erschienen worin ich dann lustig Schadcode reinschreiben könnte.

Also bin ich wieder am Anfang. Ich hab was von wegen <code>bla</code> html tags erfahren, dieses funktioniert aber nur teilweise.

Wie kriege ich also nun Schadcode geflitert usw? Bzw wie verhindere ich das er ausgeführt wird?

Oder kann ich zumindest irgendein Chekup einbauen der kontrolliert ob User xy java an hat. Wenn ja, zeigt er die Eingabebox, wenn nicht, soll nur ne Meldung kommen.

Danke.

Tomekk.
 
In dem du "böse" Zeichen maskierst.

Für das Eintrag in die Datenbank gibt es da [phpf]mysql_real_escape_string[/phpf] und ansonsten gibt es [phpf]htmlspecialchars[/phpf].

Wobei du von PHP Code sprichst und wenn PHP Code ausgeführt wird, ist da einiges im Argen, denn das sollte unter keinen Umständen passieren.
 
Ich würde das Problem folgendermassen angehen:

1. Analysieren des Textes und die Dinge, die ich erlauben möchte (Links z.B.) in umwandeln.
2. Escapen der Textes mit einem strip_tags(). Da die Links ja schon umgewandelt wurden, fällt dann auch das [Link] etc. pp. dem strip_tags nicht mehr zum Opfer.

Gruss
JCB
 
Heißt das ich muss jetzt jeden Codetag maskieren? :eek:

Gibt es nicht eine Funktion die ALLES blocken soll und nur rein Text ausgeben kann/soll?

Den es soll nur Text ausgegeben werden. Keine link's möglichkeiten, keine smileys usw...
 
Heißt das ich muss jetzt jeden Codetag maskieren? :eek:

Gibt es nicht eine Funktion die ALLES blocken soll und nur rein Text ausgeben kann/soll?

Den es soll nur Text ausgegeben werden. Keine link's möglichkeiten, keine smileys usw...

Strip_tags, oder das was mein Vorredner bereits sagte.
Endresultat: Reiner Text.

Wie gesagt, das was Du zulassen willst. Du willst nix zulassen, also... brauchst Du da auch nix händisch maskieren.

Gruss
JCB
 
Ja dann wie mach ich das?

einfach strip_tags(ALL); oder wie?

Beispiel:
PHP:
<?php
$Ungefiltert = "<a href=\"www.nudistencamp.de\">Die Bibel als Text zum durchlesen</a> kann ich nur empfehlen.";
$Gefiltert = strip_tags($Ungefiltert);
var_dump($Gefiltert);
?>

Probiers das mal aus.

Probier das Gleiche mal mit einem Ersetzen des

$Gefiltert = strip_tags($Ungefiltert);

durch

$Gefiltert = mysql_escape_string($Ungefiltert);

und vergleiche das Ergebnis.

Gruss
JCB
 
Das
Code:
string(57) "Die Bibel als Text zum durchlesen kann ich nur empfehlen."
Kommt beim:
PHP:
<?php
$Ungefiltert = "<a href=\"www.nudistencamp.de\">Die Bibel als Text zum durchlesen</a> kann ich nur empfehlen.";
$Gefiltert = strip_tags($Ungefiltert);
var_dump($Gefiltert);
?>
Und das:
Code:
string(93) "Die Bibel als Text zum durchlesen kann ich nur empfehlen."
Bei dem Code:
Code:
<?php
$Ungefiltert = "<a href=\"www.nudistencamp.de\">Die Bibel als Text zum durchlesen</a> kann ich nur empfehlen.";
$Gefiltert = mysql_escape_string($Ungefiltert);
var_dump($Gefiltert);
?>

Ehrlich gesagt versteh ich das nicht.

Beim 2ten wird der Link angezeigt, funktioniert aber nicht, beim ersten wird der link nicht angezeigt.

Was heißt das nun? das ich beim ersten alle cod tags hinzufügen muss?
 
Ehrlich gesagt versteh ich das nicht.

Beim 2ten wird der Link angezeigt, funktioniert aber nicht, beim ersten wird der link nicht angezeigt.

Was heißt das nun? das ich beim ersten alle cod tags hinzufügen muss?

Sagt bereits der Name der Funktionen:-).

strip_tags entfernt, wie der Name schon sagt, die im zu behandelnden String enthaltene Tags radikal - sprich, das Zeug ist nicht mehr im Text enthalten, also auch kein schädlicher Code darin mehr möglich (jedenfalls theoretisch).

mysql_escape_string escaped, wie ebenfalls der Name schon sagt, die Tags. Durch dieses escapen werden sie nicht entfernt, aber so umformatiert, dass die Wirkung die die Tags hätten ausbleibt.

Die Frage ist eben, was genau Du willst.

Wie Du schon sagtest, willst Du reinen Text. Meinem persönlichen Empfinden hat in reinem Text nichts verloren, was escaped ist, aber das ist rein subjektiv.

Willst Du es allerdings so haben, dass man z.B. einen eingegebenen Link auch noch später folgen, respektive verwerten kann, dann ist mysql_escape_string() Dein Freund.

Gruss
JCB
 
Zurück