TinyMCE schadcode kontrolle

  • Themenstarter Themenstarter ByeBye 177919
  • Beginndatum Beginndatum
Code:
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.

Ja, will alles filtern, also es soll rein gar nichts ausgeführt werden.

Also nehme ich das >
Code:
<?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);
?>


Aber wie sag ich da dann das er alles ignorieren soll? Muss ich jeden einzelnen HTML/what_ever tag reinschreiben?
 
PHP.net sagt dazu doch eigendlich alles.

PHP.net Beispiel:

PHP:
<?php
$text = '<p>Test-Absatz.</p><!-- Kommentar --> <a href="#fragment">Anderer Text</a>';
echo strip_tags($text);
echo "\n";

// <p> und <a> zulassen
echo strip_tags($text, '<p><a>');
?>

Code:
Test-Absatz. Anderer Text
<p>Test-Absatz.</p> <a href="#fragment">Anderer Text</a>
 
Ja also muss ich jeden tag so filtern.

Das ist aber enorm viel arbeit wenn ich bedenke wie viele html tags es gibt....
 
Die Funktion filtert doch alles, ohne dass du irgendwas dazu tust.
Du hast deine Gästebuch-Textbox mit dem Namen "eintrag". Kurz bevor du das in die DB schreibst machst du einfach
PHP:
$eintrag_sauber = strip_tags($_POST["eintrag"]);
und kannst dann bei deinem INSERT-Statement mit $eintrag_sauber arbeiten.
Und dann hast du in der DB kein einziges HTML-Tag mehr.
 
Ja also muss ich jeden tag so filtern.

Das ist aber enorm viel arbeit wenn ich bedenke wie viele html tags es gibt....
Ehmmmm, Du liest was man Dir schreibt? Oder überfliegst Du das nur? Vielleicht zu wenig geschlafen? Passiert mir hin und wieder mal:-).

Du musst nur die Tags angeben, die NICHT rausgefiltert werden sollen. Würdest Du alle Tags angeben, müsstest Du kein strip_tags nutzen, da dann ja wieder alle Tags drin wären.

Wendest Du strip_tags() auf einen String ohne weitere Angaben an, so werden ALLE Tags entfernt.

PHP:
$gefiltert = strip_tags($ungefiltert); // Aus dem Ursprungsstring $ungefiltert
// werden ALLE Tags entfernt, der neue String ist $gefiltert
// in dem keinerlei Tags mehr vorhanden sind.
$teilgefilter = strip_tags($ungefiltert, "<b>"); // Es werden alle Tags, bis auf <b> entfernt.

Jetzt mach Dir mal die Mühe, und konsultiere http://de3.php.net/manual/de/function.strip-tags.php - die Anleitung von PHP hat so ziemlich jeder Programmierer irgendwo immer griffbereit und zieht auch diese immer wieder zu Rate.

Gruss
JCB
 
ACHSO! :D

Das wusste ich nicht. Ich hab bis jetzt es so verstanden das nur die Tags gefiltert werden die drin stehen.

Ja dann ist mein Problem gelöst :)

Danke an alle für die Geduld :)
 
Ich würde lieber [phpf]htmlspecialchars[/phpf] verwenden, da es nicht löscht, sondern maskiert. Und das eben nicht nur Tags, sondern den gesamten String.
 
Ich würde lieber [phpf]htmlspecialchars[/phpf] verwenden, da es nicht löscht, sondern maskiert. Und das eben nicht nur Tags, sondern den gesamten String.

Wieso? Weil so wie ich es machen wollen würde sollte man es nicht machen - steht in den kommentaren :D

Code sieht jetzt so aus >

gbook.php
PHP:
<?php
include ("cfg/functions.php");
loginuser();
echo('<b><font size="+1"><tc>Guestbook</tc></font></b>');
echo('<br>');
echo('<br>');
connect();
$menu = mysql_query("SELECT ID, author, date, text FROM guestbook ORDER BY date desc limit 0,3");
$rows = mysql_num_rows($menu);
if(mysql_num_rows($menu)>0)
{
	for($i=0; $i<mysql_num_rows($menu); $i++)
	{
		$result = mysql_fetch_object($menu); 
	echo("<table><tr><td><tc>$result->date @ $result->author #$result->ID</tc></td></tr><tr><td><tc>------------------</tc></td></tr><tr><td><tc>$result->text</tc></td></tr><tr><td><tc>------------------</tc></td></tr></table><br>");
			   }
	}
include ("pgbook.php");
?>

gbook.php
PHP:
<?php
include_once ("cfg/functions.php");
loginuser();
echo('<form id="gbook" name="gbook" method="post" action="index.php?p=gbook">');     
echo('<textarea name="guestbook" rows="5" cols="25"></textarea>');
echo('<br>');
echo('<input name="submit" type="submit" class="liteoption" id="submit" value="Abschicken"/>');
echo('<input name="submit2" type="submit" class="liteoption" id="submit" value="Alle zeigen"/>');
echo('</form>');    
if(isset($_POST['submit'])) {
if(!$_POST['guestbook']) {
die('<tc>bitte was eintragen!</tc>');
}
else {
connect();   
$datum = (date('d.m.y H:i:s')); 
$text = strip_tags($_POST['guestbook']);  
if(!$text) {
die('<tc>Code ist nicht erlaubt!</tc>');
}
else {
$user = ($_SESSION["User"]);
$ieintrag = mysql_query("INSERT INTO guestbook (author, date, text) VALUES ('$user', '$datum', '$text')");
echo ('<tc>Gästebuch eintrag geschrieben...</tc><meta http-equiv="refresh" content="2; url=index.php?p=gbook">');
}
}
if(isset($_POST['submit2'])) {
echo('<b><font size="+1"><tc>Alle Einträge</tc></font></b><br><br>');
connect();   
$menu = mysql_query("SELECT ID, author, date, text FROM guestbook ORDER BY date desc");
$rows = mysql_num_rows($menu);
if(mysql_num_rows($menu)>0)
{
	for($i=0; $i<mysql_num_rows($menu); $i++)
	{
		$result = mysql_fetch_object($menu); 
	echo("<table><tr><td><tc>$result->date @ $result->author</tc></td></tr><tr><td><tc>------------------</tc></td></tr><tr><td><tc>$result->text</tc></td></tr><tr><td><tc>------------------</tc></td></tr></table><br>");
			   }
	}
}
}
?>
<head>

Wie sollte ich es stattdessen lösen?
 
Weisst Du, bei PHP führen viele Wege zum Ziel. PHP besitzt so viele Funktionen, dass selbst ich nach Jahren immer wieder was Neues finde.

Funktioniert Dein Code? Bringt er genau das, was Du möchtest? Dann lass es so!

Viel Spass noch
JCB

Das sag ich auch immer!! :)

Also das es viele Wege zum Ziel gibt :)

Den es gibt viele - die auch schon seit jahren php coden - die sagen mein CMS ist der absolute graus vom Codestyle usw :)

Ja, er funktioniert, dann werde ich dein Rat befolgen und es so lassen :)
 
Zurück