Hey,
also zu allererst: Ich habe und die Forensuche benutzt
(z.B: suche im forum nach "Usereingaben", oder dieser Artikel Link )
Aber ich hab da noch ne Frage
Also, ich verwende nen bbcode für mein kleines cms (noch localhost, darum kein link) und speichere die eingaben in einer mySQL Datenbank.
Jetzt aber meine Frage, wie mach ich das am besten.
Meine bisherige vorgehensweise:
Alle Usereingaben ($_GET, $_POST, $_COOKIE, ..) mit folgenden funktionen "sichern":
- stripslashes()
- nl2br()
- eigene funktion (beispielname: htmlinput [wird gleich noch genauer beschrieben])
- mysql_real_escape_string()
- 2te eigene funktion (beispielname: htmloutput [wird auch noch genauer beschrieben])
So werden die Eingaben also dann in die mysql db gespeichert.
Hier noch (in etwa) die funktionen htmlinput / htmloutput:
Beim auslesen benutze ich dann keine "Filterung" mehr.
Warum ich beim speichern den code nach Schädlingen durchsuche und bei der Ausgabe nicht mehr?
=> Beim speichern ist das einmal, bei dem es ein paar ms länger dauert, beim ausgeben dauerts dann bei jedem Aufruf ein paar ms länger.
Aber ist das denn sinnvoll so wie ich das mache?
Oder soll ich beim speichern z.b. nur mysql_real_escape_string() wirken lassen, und den Rest alles bei der Ausgabe ?
Weil so wie ich das jetzt habe bekomme ich z.B. das mit dem php-highlighten auch nicht hin.
Wie löst ihr denn solche Sachen immer? Gibts da n paar Tips, wie man das am besten macht von den Profis?
\\EDIT: mhh, irgendwie geht das mit dem [ php ] hier nicht so richtig ... :/
also zu allererst: Ich habe und die Forensuche benutzt
(z.B: suche im forum nach "Usereingaben", oder dieser Artikel Link )
Aber ich hab da noch ne Frage
Also, ich verwende nen bbcode für mein kleines cms (noch localhost, darum kein link) und speichere die eingaben in einer mySQL Datenbank.
Jetzt aber meine Frage, wie mach ich das am besten.
Meine bisherige vorgehensweise:
Alle Usereingaben ($_GET, $_POST, $_COOKIE, ..) mit folgenden funktionen "sichern":
- stripslashes()
- nl2br()
- eigene funktion (beispielname: htmlinput [wird gleich noch genauer beschrieben])
- mysql_real_escape_string()
- 2te eigene funktion (beispielname: htmloutput [wird auch noch genauer beschrieben])
So werden die Eingaben also dann in die mysql db gespeichert.
Hier noch (in etwa) die funktionen htmlinput / htmloutput:
PHP:
<?php
function htmlinput($variable) {
$variable = preg_replace("#\<a href=\"(.*?)\">(.*?)</a>#si", "[ a=\\1 ]\\2[ /a ]", $variable);
$variable = preg_replace("#\<b>(.*?)\</b>#si", "[ b ]\\1[ /b ]", $variable);
$variable = preg_replace("#\<u>(.*?)\</u>#si", "[ u ]\\1[ /u ]", $variable);
$variable = str_replace("<hr />", "[ hr ]", $variable);
$variable = str_replace("<hr>", "[ hr ]", $variable);
$variable = str_replace("<br />", "[ br ]", $variable);
$variable = str_replace("<br>", "[ br ]", $variable);
//bis hierher werden also die html-befehle die zugelassen sind in bbcode umgewandelt
//folgende "Ersetzungen" ersetzten den Befehl htmlentities(), sinn?-> hab selber genau in der hand was ich da mach
$variable = str_replace("&", "&", $variable);
$variable = str_replace("\"", """, $variable);
$variable = str_replace("<", "<", $variable);
$variable = str_replace(">", ">", $variable);
$variable = str_replace("'", "'", $variable);
return $variable;
}
function htmloutput($variable) {
$variable = str_replace("[ br ]", "<br />", $variable);
$variable = str_replace("[ hr ]", "<hr />", $variable);
$variable = preg_replace("#\[ b ](.*?)\[ /b ]#si", "<b>\\1</b>", $variable);
$variable = preg_replace("#\[ u ](.*?)\[ /u ]#si", "<u>\\1</u>", $variable);
$variable = preg_replace("#\[ a=javascript(.*?)\ ](.*?)\[ /a \]#si", "<a href=\"javascript\\1\">\\2</a>", $variable);
$variable = preg_replace("#\[ a=(.*?)\ ](.*?)\[ /a \]#si", "<a href=\"\\1\" target=\"_blank\">\\2</a>", $variable);
$variable = preg_replace("/\[ php ](.*)\[ \/php \]/esiU", "highlight_string('$1', true)", $variable);
//hier wird der bbcode dann wieder umgewandelt in html
return $variable;
}
?>
Beim auslesen benutze ich dann keine "Filterung" mehr.
Warum ich beim speichern den code nach Schädlingen durchsuche und bei der Ausgabe nicht mehr?
=> Beim speichern ist das einmal, bei dem es ein paar ms länger dauert, beim ausgeben dauerts dann bei jedem Aufruf ein paar ms länger.
Aber ist das denn sinnvoll so wie ich das mache?
Oder soll ich beim speichern z.b. nur mysql_real_escape_string() wirken lassen, und den Rest alles bei der Ausgabe ?
Weil so wie ich das jetzt habe bekomme ich z.B. das mit dem php-highlighten auch nicht hin.
Wie löst ihr denn solche Sachen immer? Gibts da n paar Tips, wie man das am besten macht von den Profis?
\\EDIT: mhh, irgendwie geht das mit dem [ php ] hier nicht so richtig ... :/