TinyMCE - Er den en risiko for sikkerhet?

Mr Vest

Sjefen over alle sjefer!
Jeg vurderer hvilken editor jeg skal bruke når medlemmer på min nettside skal få redigere profilene sine. Profilene skal altså få inneholde tekst, video og bilder som de legger inn gjennom en editor de får frem på skjermen.

TinyMCE syns jeg er veldig bra, men jeg er redd for sikkerheten. Før jeg bestemmer meg for om jeg skal bruke TinyMCE eller ikke må jeg spørre. Er det farlig for mitt nettsted at brukeren kan skrive inn hvilken HTML som helst? Er det ikke Javascript som kan være farlig? Dersom jeg henter ut TinyMCE-editoren med Javascript, slik at den altså ikke kommer frem dersom brukeren ikke har Javascript aktivert - er ikke jeg da på den sikre siden? HTML kan vel ikke gjøre noe skade, eller tar jeg feil nå?

- På forhånd, takk for svar. :)
 

Helge

Profesjonell Googlesøker
sett inn begrensninger for hvilke html tags de kan bruke hvertfall. Det er jo mulig å endre hele designet på siden visst ikke.

Var et nettsamfunn som åpnet for CSS kode din egen profil for et par år tilbake siden.. Tok meg 5 minutt å endre designet på hele siden deres :p hehe
 

Mr Vest

Sjefen over alle sjefer!
Det er bra du nevner det, men for meg gjør ikke det noe om de endrer på designet. Liker å se folk som er litt frempå og engasjerer seg jeg. Om det skulle vise seg å være et problem å la brukerne endre på design skal jeg heller ta bort alle stylesheets fra koden de legger opp. :)
 

Sjefskoder

Sjefskoder
Om du kombinerer tiny med php så kan du sikre deg en smule mer..

Brukte tiny for noen år siden og la inn litt php-valideringer å hadde aldrig noe problemer med at det ble spammet eller noe i den duren...

Men, som et rent JS er det virkelig ikke å anbefalle..

Legger du ned litt ekstra tid på tiny og smeller inn litt mer sikkerhet i dette i form av php-hjelp så er du rimelig sikker igrunn ;)
 

Mr Vest

Sjefen over alle sjefer!
Jeg vet ikke helt om jeg forstod deg nå Sjefskoder. TinyMCE krever Javascript aktivert for å fungere den. Dersom Javascript er deaktivert viser den kun et helt vanlig lite textarea til brukeren.

Når du sier kombinere med PHP, mener du da å strippe ut diverse farlige greier når det brukern har skrevet inn blir printet ut?
 

Sjefskoder

Sjefskoder
Når du sier kombinere med PHP, mener du da å strippe ut diverse farlige greier når det brukern har skrevet inn blir printet ut?

Yess man! :p
 

Mr Vest

Sjefen over alle sjefer!
Seesee. Blæææ. Det er jo ikke bra for helsen min altså. Det hørtes ut som en enormt lang liste over forkjellige greier som må bort, og selv kan jeg ingen av dem... Noen tips til noen snarveier her, som f.eks å få bort absolutt alt av Javascript?

Er det egentlig noe som helst annet enn akkurat Javascript jeg trenger bekymre meg for når det gjelder sikkerhet?
 

Sjefskoder

Sjefskoder
Det er veldig mye å forholde seg til når det gjelder sikkerhet..

Det første du gjør er å bestemme deg for hva som får skje og hva som ikke får skje, hva som er lov og ikke lov, hva som kreves og ikke kreves.... validering ;)

F.eks, vil du at et telefon-felt skal inneholde 8 tegn..
Da kan vi bruke noe som dette.:

PHP:
// 8 tegn : 
	$regex = "/^\d{8}$/"; //sjekker etter tall og kun tall
	$tlf_sjekk = !preg_match($regex, $tlf);
	$tlf = $_POST['tlf'];
	
		if($_POST['Send'] and $tlf_sjekk == 1 and $tlf != 1) {

		echo "Åttesiffret nummer påkrevd.";
	} else echo $tlf;
?>

Så det første du skal gjøre er å bestemme deg for hvilke regler du skal ha..

Også tar vi det videre fra der :p

og du.. det finnes ingen snarveier til sikkerhet ;)
 

Mr Vest

Sjefen over alle sjefer!
Ush, æsj, jeg hater sikkerhet. Også ingen snarveier heller. :/ Når jeg blir president for jordkloden skal jeg umiddelbart innføre henging av alle som mistenkes for hacking. (jo, jeg er på en måte glad for at jeg ikke er president for jordkloden altså.) :)

Det som er greia her (om jeg kan sammenligne) er at dette er et helt vanlig textarea hvor brukeren kan legge inn alt mulig. Det kan altså sammenlignes med en profil på Nettby, hvor man altså kan legge inn video, bilder og tekst direkte i et textarea som bruker TinyMCE. Jeg vil ikke sette noen som helst stopper for hva brukeren kan legge inn av innhold i dette feltet. Alt av HTML og CSS skal altså være lov.

I min situasjon føler jeg da at det eneste som kan skade nettstedet er Javascript. At HTML kan skade et nettsted uten at brukeren faktisk manuelt klikker seg innom alt mulig hxn finner tror jeg ikke. Jeg tror jeg er ganske sikret dersom jeg stenger ute alt Javascript fra det som printes ut. Tror dere det?
 

mkander

Medlem
TinyMCE er kun en javascript editor for å formatere hva du skriver inn i tekstboksen. Den har ingenting med sikkerheten på nettstedet å gjøre. Du må uansett validere all input og sørge for at det ikke blir noen xss-vulnerabiliteter.
 

Bjørnar

Gründer
sikkerheten med tanke på tinyMCE, som mkander sier, ikke nødvendig. det som derimot er nødvendig, er sikkerheten på selve textareaen. så ikke tenk på TinyMCE, tenk på tekstboksen. ble det bare rart, dette?
 

Sjefskoder

Sjefskoder
Som sagt over her, så er TinyMCE kun en WYSIWYG-editor som gjør om input-text til html.. Den har som og sagt, ingenting med sikkerheten å gjøre.. Det er bare et verktøy..

Så ja, sikkerhetensrisikoen ligger ikke i tinymce men, i textarean og det er her du må sjekke for sikkerhet om du vil ha noe da..


og dersom du er redd for hva personer kan få for seg å skrive så kan du f.eks bruke deg av funksjonen str_replace

dersom noen skriver "pikk" så kan du endre output'n til p**k ;)

PHP:
$textarea = str_replace("pikk", "p**k", $teaxtarea);

Blir mye arbeid å sitte og tenke ut alle stygge ord da men..
 

Mr Vest

Sjefen over alle sjefer!
jebbis skrev:
ble det bare rart, dette?

Neida, dette ble ikke rart. TinyMCE er altså bare et slags "skall" for et helt vanlig <textarea> som gjør det enklere å få inn tagger, bilder og mer til. Jeg trodde faktisk TinyMCE var mer enn det, så det var kjempeflott å få høre det der.

Sjefskoder skrev:
Blir mye arbeid å sitte og tenke ut alle stygge ord da men..
Hehe, ja, det er litt mye arbeid. Brukerne har godtatt en avtale hvor de har lovet og holde seg unna slik "stygg ordbruk" ved registrering så jeg ser ikke på det som et stort problem.

På en måte sitter jeg kun igjen med samme spørsmål enda. Kan HTML skade datamaskinen uten at brukeren manuelt gjør noe? Er det bare Javascript jeg trenger bekymre meg for, og som evt må tas bort før dette blir lagt opp i databasen / blir printet ut til brukeren? Finnes det evt noe jeg kan gjøre for å ta bort alt av Javascript? Må ikke alt Javascript faktisk inneholde ordet Javascript eller noe annet - Slik at jeg kan bruke str_replace for å ta det bort?
 
Sist redigert:

Nextri

Rebel
PHP:
	function _strip_attributes($string,$allowtags='<b><br><br /><center><i><p><strong><u><ul><li><ol>',$allowattributes=NULL) {
		if($allowattributes) {
			if(!is_array($allowattributes)) $allowattributes = explode(",",$allowattributes);
			if(is_array($allowattributes)) $allowattributes = implode("|",$allowattributes);
			$rep = '/([^>]*) ('.$allowattributes.')(=)(\'.*\'|".*")/i';
			$string = preg_replace($rep,'$1 $2_-_-$4',$string);
		}
		$string = preg_replace('/([^>]*) (.*)(=\'.*\'|=".*")(.*)/i','$1$4',$string);
		$rep = '/([^>]*) ('.$allowattributes.')(_-_-)(\'.*\'|".*")/i';
		if($allowattributes) $string = preg_replace($rep,'$1 $2=$4',$string);
		return strip_tags($string,$allowtags);
	}
	function _strip_javascript($filter){	  
		# realign javascript href to onclick
		$filter = preg_replace("/href=(['\"]).*?javascript:(.*)?\\1/i","onclick=' $2 '",$filter);
		# remove javascript from tags
		while( preg_match("/<(.*)?javascript.*?\(.*?((?>[^()]+)|(?R)).*?\)?\)(.*)?>/i",$filter)) {
			$filter = preg_replace("/<(.*)?javascript.*?\(.*?((?>[^()]+)|(?R)).*?\)?\)(.*)?>/i","<$1$3$4$5>",$filter);
		}
		# dump expressions from contibuted content
		if(0) {
			$filter = preg_replace("/:expression\(.*?((?>[^(.*?)]+)|(?R)).*?\)\)/i","",$filter);
		}
		while(preg_match("/<(.*)?:expr.*?\(.*?((?>[^()]+)|(?R)).*?\)?\)(.*)?>/i",$filter)) {
			$filter = preg_replace("/<(.*)?:expr.*?\(.*?((?>[^()]+)|(?R)).*?\)?\)(.*)?>/i", "<$1$3$4$5>", $filter);
		}
		# remove all on* events   
		while(preg_match("/<(.*)?\s?on.+?=?\s?.+?(['\"]).*?\\2\s?(.*)?>/i",$filter)) {
			$filter = preg_replace("/<(.*)?\s?on.+?=?\s?.+?(['\"]).*?\\2\s?(.*)?>/i", "<$1$3>", $filter);
		}
		return $filter;
	}

here you go...
 

Mr Vest

Sjefen over alle sjefer!
Oioioi - tredobbelt oioioi. Huff, her prater vi ja. Dette her var jo virkelig mye mer enn forventet. :eek: Er det nå jeg burde si takk? Ja, jeg tror det altså. Tusen takk.

Men kan jeg få være teit også? Jeg fikk den ikke helt til å fungere ser du. Det jeg har gjort, slik jeg forstod koden da er å legge inn følgende på toppen av koden din:

PHP:
$string=$_POST['navn_paa_textarea'];

Og etter dette har blitt kjørt gjennom koden din legger jeg opp $filter i databasen. Resultat? Tomt databasefelt... Da er alt jeg har forsøkt å legge opp faktisk <p>dette er en test</p>. Noen tanker om dette?
 
Topp