Usereingabe + mysql + bbcode

BadMatt

Erfahrenes Mitglied
Hey,
also zu allererst: Ich habe :google: und die Forensuche benutzt ;)
(z.B: suche im forum nach "Usereingaben", oder dieser Artikel Link )

Aber ich hab da noch ne Frage :P

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("&", "&amp;", $variable);
  $variable = str_replace("\"", "&quot;", $variable);
  $variable = str_replace("<", "&lt;", $variable);
  $variable = str_replace(">", "&gt;", $variable);
  $variable = str_replace("'", "&apos;", $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", "&lt;a href=\"javascript\\1\"&gt;\\2&lt;/a&gt;", $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? :P


\\EDIT: mhh, irgendwie geht das mit dem [ php ] hier nicht so richtig ... :/
 
Hallo BadMatt

Ich persönlich mache dies immer bei der Ausgabe.
Warum ?

Naja erstens, weil mir diese herumconvertiererei auf die Nerven geht und zweitens wird es dann wieder kompliziert, wenn du den Text verändern willst bzw. wenn eins von diesen HTML Tags entfernt wird.
 
Zurück