function RemoveXSS($val) { // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed // this prevents some character re-spacing such as <java script> // note that you have to handle splits with
,
, and later since they *are* allowed in some inputs $val = preg_replace("/([x00-x08][x0b-x0c][x0e-x20])/", "", $val);
// straight replacements, the user should never need these since they"re normal characters // this prevents like <IMG SRC=@avascript:alert('XSS')> $search = "abcdefghijklmnopqrstuvwxyz"; $search .= "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; $search .= "1234567890!@#$%^&*()"; $search .= "~`";:?+/={}[]-_|"\"; for ($i = 0; $i < strlen($search); $i++) { // ;? matches the ;, which is optional // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
// @ @ search for the hex values $val = preg_replace("/([x|X]0{0,8}".dechex(ord($search[$i])).";?)/i", $search[$i], $val); // with a ; // @ @ 0{0,7} matches "0" zero to seven times $val = preg_replace("/({0,8}".ord($search[$i]).";?)/", $search[$i], $val); // with a ; }