Zum Inhalt springen

WYSIWYG Editor Sicherheit

Erstellt am 22. November 2017 · 2 Antworten · letzte Antwort am 24. November 2017

Tags: PHP, TYPO3 7, Sicherheit, Frage

Power-Poler ·

Guten Tag,
ich nutze den TinyMCE Editor im Frontend. Jetzt wäre da die Frage der Sicherheit.
Habe gelesen, wenn man JavaScript Deaktiviert, und direkt im Textfeld <script> verwändet, dass dieser Code ausgeführt wird. Und siehe da, eine alert Box erscheint auf der Startseite. Geil.
Leite jetzt den kompletten Code über folgende Funktion:

private function removescript(string $bodyText){
	$event = array(
		'onafterprint',
		'onbeforeprint',
		'onbeforeunload',
		'onerror',
		'onhashchange',
		'onload',
		'onmessage',
		'onoffline',
		'ononline',
		'onpagehide',
		'onpageshow',
		'onpopstate',
		'onresize',
		'onstorage',
		'onunload',
		'onblur',
		'onchange',
		'oncontextmenu',
		'onfocus',
		'oninput',
		'oninvalid',
		'onreset',
		'onsearch',
		'onselect',
		'onsubmit',
		'onkeydown',
		'onkeypress',
		'onkeyup',
		'onclick',
		'ondblclick',
		'onmousedown',
		'onmousemove',
		'onmouseout',
		'onmouseover',
		'onmouseup',
		'onmousewheel',
		'onwheel',
		'ondrag',
		'ondragend',
		'ondragenter',
		'ondragleave',
		'ondragover',
		'ondragstart',
		'ondrop',
		'onscroll',
		'oncopy',
		'oncut',
		'onpaste',
		'onabort',
		'oncanplay',
		'oncanplaythrough',
		'oncuechange',
		'ondurationchange',
		'onemptied',
		'onended',
		'onerror',
		'onloadeddata',
		'onloadedmetadata',
		'onloadstart',
		'onpause',
		'onplay',
		'onplaying',
		'onprogress',
		'onratechange',
		'onseeked',
		'onseeking',
		'onstalled',
		'onsuspend',
		'ontimeupdate',
		'onvolumechange',
		'onwaiting',
		'onshow',
		'ontoggle'
		);
		
	$newBodyText = str_replace('<script>', '&lt;script&gt;', $bodyText);
	$newBodyText = str_replace('</script>', '&lt;/script&gt;', $newBodyText);
	$newBodyText = str_replace($event, 'nichts', $newBodyText);
	
	return $newBodyText;

}

Was meint ihr? Gibt es weitere Befehle, die ich abfangen muss? Gibt es überhaupt eine Möglichkeit einen Editor dieser Art sicher zu bekommen? Kennt ihr alternativen?

Power-Poler ·

Danke für deine Antwort.
Das ist doch auch nur JavaScript, oder sehe ich das falsch?
Dann könnte man ja immer noch mit Deaktivierten JavaScript und direkter Eingabe in das Textfeld, code einschleusen.

Bräuchte ne PHP Lösung.

	$newBodyText = str_replace('<script>', '&lt;script&gt;', $bodyText);
	$newBodyText = str_replace('</script>', '&lt;/script&gt;', $newBodyText);
	$newBodyText = str_replace('<link', '&lt;link', $newBodyText);
	$newBodyText = str_replace('<meta', '&lt;meta', $newBodyText);
	$newBodyText = str_replace('<style', '&lt;style', $newBodyText);
	$newBodyText = str_replace('<html', '&lt;html', $newBodyText);
	$newBodyText = str_replace('<body>', '&lt;body&gt;', $newBodyText);
	$newBodyText = str_replace('<iframe', '&lt;iframe', $newBodyText);
	$newBodyText = str_replace('<embed', '&lt;embed', $newBodyText);
	$newBodyText = str_replace($event, 'nichts', $newBodyText);
	return strip_tags($newBodyText,'<p><a><span><img><h1><h2><h3><h4><h5><h6><em><strong><sup>');

Habe jetzt noch das ergänzt. Soll heißen, wer "normalen" ausführbaren Code Postet, bekommt diesen am Ende auch Angezeigt, als Text halt. Wer groß und Kleinschreibung etc. ausnutzt, bekommt nichts mehr angezeigt. Wird zwar nicht alles Abdecken, sollte aber für meine Zwecke reichen.
Für Ideen, wie ich mein System austricksen kann, bin ich offen. 😃
*str_replace durch str_ireplace ersetzt
Und ich bin mir bewusst, was es heißen kann img und a Tags zu erlauben, und was die von wo auch immer laden könnten.