Is dit een veilig BBcode script?

Status
Niet open voor verdere reacties.

Remi1995

Gebruiker
Lid geworden
31 jul 2009
Berichten
291
Hallo.

Kan iemand mij vertellen of het volgende script veilig is? Of heeft iemand misschien een beter script die ik mag gebruiken?

Het is een script voor BBcodes voor data dat is ingevoerd door de gebruiker.
Voordat de data in de database word gezet, gebruik ik de function Mysql_real_escape_string erop en deze functie word erop gebruikt voordat ik het echo.

Ik zat eerst eraan te denken om de data te exploden met spaties en daarmee BBcode te veranderen naar HTML, maar dit leek mij simpeler.

PHP:
// Function voor het echo'en van tekst die in de database staat (En die door een ingevulde form van de gebruiker erin is gezet), dit is voor bijvoorbeeld forums.
function useroutputfilter($input,$rechten){
	// De code in het ifje niet uitvoeren als de gebruiker waardoor het bericht is gepost Moderator rechten (Of hoger) heeft.
	if($rechten < 1){
		// Ik wil dat gebruikers die het prettiger vinden om HTML te gebruiken inplaats van BBcode dat kunnen doen, vandaar dat de onderstaande HTML code word omgezet in BBcode voordat Htmlspecialchars erop los word gegooid.
		$htmlcodesarray2 = array(
			"'\<b>(.*?)\</b>'is",
			"'\<i>(.*?)\</i>'is",
			"'\<u>(.*?)\</u>'is",
			"'\<s>(.*?)\</s>'is",
			"'\<center>(.*?)\</center>'is",
			"'\<h2>(.*?)\</h2>'is",
			"'\<a href=\"(.*?)\">(.*?)\</a>'is",
			"'\<img src=\"(.*?)\" />'is"
		);
		$bbcodesarray2 = array(
			"[b]\\1[/b]",
			"[i]\\1[/i]",
			"[u]\\1[/u]",
			"[s]\\1[/s]",
			"[center]\\1[/center]",
			"[h]\\1[/h]",
			"[url=\\1]\\2[/url]",
			"[img]\\1[/img]"
		);
		$input = preg_replace($htmlcodesarray2,$bbcodesarray2,$input);
		
		$input = htmlspecialchars($input);
	}
	
	$input = nl2br($input);
	
	// Als devolgende regel er niet stond dan werkt NL2BR niet meer door de regel die erna komt.
	$input = str_replace('<br />','<br/>',$input);
	
	// Zo worden meerdere spaties achter elkaar niet genegeerd door de browser.
	$input = str_replace(' ','&nbsp;',$input);
	
	// BBcode to HTML
	$bbcodesarray = array(
		"'\[b](.*?)\[/b]'is",
		"'\[i](.*?)\[/i]'is",
		"'\[u](.*?)\[/u]'is",
		"'\[s](.*?)\[/s]'is",
		"'\[center](.*?)\[/center]'is",
		"'\[h](.*?)\[/h]'is",
		"'\[url=(.*?)\](.*?)\[\/url\]'is",
		"'\[img](.*?)\[/img]'is",
	);
	$htmlcodesarray = array(
		"<b>\\1</b>",
		"<i>\\1</i>",
		"<u>\\1</u>",
		"<s>\\1</s>",
		"<center>\\1</center>",
		"<h2>\\1</h2>",
		'<a href="$1" title="$1" target="_blank" class="tooltip">$2</a>',
		'<img src="$1" title="$1" class="tooltip" />'
	);
	$output = preg_replace($bbcodesarray,$htmlcodesarray,$input);
	
	// Het uiteindelijk returnen, klaar om te worden geecho'd.
	return $output;
}



Groetjes, Remi.
 
het script op zich is niets fout aan het beschermt je niets het is enkel om de ingegeven []als tags te kunnen laten zien nadien en onderscheid te kunnen maken van je eigen pagina en de ingevoerde code van je gebruiker

een bijkomende test om te kijken of elke tag is gesloten zou ook aangewezen zijn om problemen op je layout niet te laten voorkomen.
 
het script op zich is niets fout aan het beschermt je niets het is enkel om de ingegeven []als tags te kunnen laten zien nadien en onderscheid te kunnen maken van je eigen pagina en de ingevoerde code van je gebruiker

een bijkomende test om te kijken of elke tag is gesloten zou ook aangewezen zijn om problemen op je layout niet te laten voorkomen.
Ok ga ik doen, bedankt voor je reactie.

Edit: Yep, een BBcode tag word niet omgezet in HTML als hij niet word gesloten.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan