[SOLVED] String in BBCode mit Funktion bearbeiten

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
Rondom
Mitglied
Beiträge: 36
Registriert: 06.03.2004 23:47
Wohnort: Kirchhain-Emsdorf

[SOLVED] String in BBCode mit Funktion bearbeiten

Beitrag von Rondom »

Hi, ich möchte ein String in einem BBCode per htmlspecialchars vor XSS-Bugs schützen. Ich habe vorher die entsprechenden Zeichen einfach per regexp verboten, aber einige user wollen manche Zeichen trotzdem benutzen.
Ich habe mich an die Arbeit gemacht und erstmal, wie es beim quote-tag auch ist, "]" erlaubt.

Code: Alles auswählen

				// Grab everything until the first "]"...
				$possible_start = substr($text, $curr_pos, strpos($text, ']', $curr_pos + 1) - $curr_pos + 1);

				//
				// We're going to try and catch usernames with "[' characters.
				//
				if( preg_match('#\[quote=\\\"#si', $possible_start, $match) && !preg_match('#\[quote=\\\"(.*?)\\\"\]#si', $possible_start) )
				{
					// OK we are in a quote tag that probably contains a ] bracket.
					// Grab a bit more of the string to hopefully get all of it..
					if ($close_pos = strpos($text, '"]', $curr_pos + 9))
					{
						if (strpos(substr($text, $curr_pos + 9, $close_pos - ($curr_pos + 9)), '[quote') === false)
						{
							$possible_start = substr($text, $curr_pos, $close_pos - $curr_pos + 2);
						}
					}
				}

				//
				// We're going to try and catch showhide-texts with "[' characters.
				//
				if( preg_match('#\[showhide=\\\"#si', $possible_start, $match) && !preg_match('#\[showhide=\\\"(.*?)\\\"\]#si', $possible_start) )
				{
					if ($close_pos = strpos($text, '"]', $curr_pos + 9))
					{
						if (strpos(substr($text, $curr_pos + 9, $close_pos - ($curr_pos + 9)), '[showhide') === false)
						{
							$possible_start = substr($text, $curr_pos, $close_pos - $curr_pos + 2);
						}
					}
				}

Ich habe es allerdings jetzt schon mehrmals versucht und ich habe es nicht hingekriegt den String in meinem BBCode mit htmlspecialchars zu bearbeiten. Der BBCode geht so [showhide="bla"]fsfdasd[/showhide]. Das Bla soll mit htmlspecialchars gefiltert werden.

PS: Link zur aktuellen Version, die noch einige Sonderzeichen blockiert.
Zuletzt geändert von Rondom am 17.05.2004 14:12, insgesamt 1-mal geändert.
Benutzeravatar
Rondom
Mitglied
Beiträge: 36
Registriert: 06.03.2004 23:47
Wohnort: Kirchhain-Emsdorf

Beitrag von Rondom »

Habe es selber rausgefunden. Ich habe bisher immer nur tuts zu regexp gelesen, die eigentlich für Perl geschrieben wurden. In der dclp-faq habe ich über den modifier e gelesen. Ich dachte erst, dass würde noch eine viel größer Sicherheitslücke hervorrufen, aber anscheinend bearbeitet das PCRE-Modul die Strings entsprechend :)

8.11. Wie ersetze ich in einem Text, jedoch nicht innerhalb von HTML-Tags?
http://www.dclp-faq.de/q/q-regexp-ersetzen.html
Download my Hacks - Seite momentan offline :(
Antworten

Zurück zu „Coding & Technik“