1*04fd306cSNickeau<?php 2*04fd306cSNickeau 3*04fd306cSNickeau 4*04fd306cSNickeaunamespace ComboStrap\Web; 5*04fd306cSNickeau 6*04fd306cSNickeau 7*04fd306cSNickeauuse ComboStrap\LogUtility; 8*04fd306cSNickeau 9*04fd306cSNickeauclass Sanitizer 10*04fd306cSNickeau{ 11*04fd306cSNickeau 12*04fd306cSNickeau public static function sanitize($content, $suffixMessage = "", $canonical = "security") 13*04fd306cSNickeau { 14*04fd306cSNickeau /** 15*04fd306cSNickeau * Nodes 16*04fd306cSNickeau */ 17*04fd306cSNickeau $forbiddenNodes = ["script", "style", "iframe"]; 18*04fd306cSNickeau foreach ($forbiddenNodes as $forbiddenNode) { 19*04fd306cSNickeau $pattern = "<$forbiddenNode"; 20*04fd306cSNickeau $result = preg_match_all("/$pattern/im", $content, $matches); 21*04fd306cSNickeau if ($result) { 22*04fd306cSNickeau return self::logAndReturnTheEmptyString("You can't used a $forbiddenNode node$suffixMessage.", $canonical); 23*04fd306cSNickeau } 24*04fd306cSNickeau } 25*04fd306cSNickeau 26*04fd306cSNickeau /** 27*04fd306cSNickeau * Attribute 28*04fd306cSNickeau */ 29*04fd306cSNickeau $pattern = "style="; 30*04fd306cSNickeau $result = preg_match_all("/$pattern/im", $content, $matches); 31*04fd306cSNickeau if ($result) { 32*04fd306cSNickeau return self::logAndReturnTheEmptyString("You can't used a style attribute $suffixMessage", $canonical); 33*04fd306cSNickeau } 34*04fd306cSNickeau 35*04fd306cSNickeau $pattern = "on[a-zA-Z]*="; 36*04fd306cSNickeau $result = preg_match_all("/$pattern/im", $content, $matches); 37*04fd306cSNickeau if ($result) { 38*04fd306cSNickeau return self::logAndReturnTheEmptyString("You can't used an callback handler on attribute $suffixMessage", $canonical); 39*04fd306cSNickeau } 40*04fd306cSNickeau 41*04fd306cSNickeau return $content; 42*04fd306cSNickeau 43*04fd306cSNickeau } 44*04fd306cSNickeau 45*04fd306cSNickeau /** 46*04fd306cSNickeau * Created to be sure that the content returned is empty 47*04fd306cSNickeau * @param string $string 48*04fd306cSNickeau * @param $canonical 49*04fd306cSNickeau * @return string 50*04fd306cSNickeau */ 51*04fd306cSNickeau private static function logAndReturnTheEmptyString(string $string, $canonical): string 52*04fd306cSNickeau { 53*04fd306cSNickeau LogUtility::msg($string, LogUtility::LVL_MSG_ERROR, $canonical); 54*04fd306cSNickeau return ""; 55*04fd306cSNickeau } 56*04fd306cSNickeau 57*04fd306cSNickeau} 58