PHP防止XSS跨站脚本攻击:对于单引号、双引号等非法HTML代码,使用htmlspecialchars()函数。使用htmlspecialchars()函数时要注意第二个参数。如果直接使用htmlspecialchars($string),第二个参数默认为ENT_COMPAT。默认函数只对双引号(")进行转义,不会对单引号(')进行转义。因此htmlspecialchars函数需要更多的时候加上第二个参数,应该这样使用:htmlspecialchars($string,ENT_QUOTES).当然,如果需要转换任何引号,使用htmlspecialchars($string,ENT_NOQUOTES)。另外,尽量少用htmlentities。htmlentities和htmlspecialchars在全英文中没有区别,都可以达到目的然而在中文中,htmlentities会转换所有的html代码,包括它无法识别的汉字,htmlentities和htmlspecialchars这两个函数不支持'well等字符串,不能转换,所以用htmlentities和htmlspecialchars转换的字符串可以只能防止XSS攻击,不能防止SQL注入攻击,所有的打印语句如echo、print等打印前必须使用htmlentities()过滤,可以preventxss,注意htmlentities($name,ENT_NOQUOTES,GB2312)要用中文写。(1).网页不断刷新''(2)。嵌入其他网站链接除了通过正常方式输入XSS攻击字符外,还可以绕过JavaScript验证,达到XSS攻击的目的通过修改请求。$value){if(!is_array($value)){if(!get_magic_quotes_gpc())//不要对magic_quotes_gpc转义的字符使用addslashes()以避免双重转义{$value=addslashes($value);//给单引号(')、双引号(")、反斜杠(\)和NUL(空字符)添加反斜杠转义}$value=preg_replace($ra,'',$value);//删除非打印字符粗略过滤xss可疑字符串$arr[$key]=htmlentities(strip_tags($value));//去掉HTML和PHP标签,转成HTML实体}else{SafeFilter($arr[$key]);}}}}?>$str='www.90boke.com';SafeFilter($str);//注释掉后会无限刷新submissionecho$str;//----------------------------php反注入和XSS攻击通用过滤-----开始-------------------------------------------//函数string_remove_xss($html){preg_match_all("/\<([^\<]+)\>/is",$html,$ms);$searchs[]='<';$replaces[]='<';$searchs[]='>';$replaces[]='>';if($ms[1]){$allowtags='img|a|font|div|table|tbody|caption|tr|td|th|br|p|b|strong|i|u|em|span|ol|ul|li|blockquote';$ms[1]=array_unique($ms[1]);foreach($ms[1]as$value){$searchs[]="<".$value.">";$value=str_replace('&','_uch_tmp_str_',$value);$value=string_htmlspecialchars($value);$value=str_replace('_uch_tmp_str_','&',$value);$value=str_replace(array('\\','/*'),array('.','/.'),$value);$skipkeys=array('onabort','onactivate','onafterprint','onafterupdate','onbeforeactivate','onbeforecopy','onbeforecut','onbeforedeactivate','onbeforeditfocus','onbeforepaste','onbeforeprint','onbeforeunload'、'onbeforeupdate'、'onblur'、'onbounce'、'oncellchange'、'onchange'、'onclick'、'oncontextmenu'、'oncontrolselect'、'oncopy'、'oncut'、'ondataavailable'、'ondatasetchanged','ondatasetcomplete','ondblclick','ondeactivate','ondrag','ondragend','ondragenter','ondragleave','ondragover','ondragstart','ondrop','onerror'、'onerrorupdate'、'onfilterchange'、'onfinish'、'onfocus'、'onfocusin'、'onfocusout'、'onhelp'、'onkeydown'、'onkeypress'、'onkeyup'、'onlayoutcomplete'、'onload','onlosecapture','onmousedown','onmouseenter','onmouseleave','onmousemove','onmouseout','onmouseover','onmouseup','onmousewheel','onmove','onmoveend','onmovestart','onpaste'、'onpropertychange'、'onreadystatechange'、'onreset'、'onresize'、'onresizeend'、'onresizestart'、'onrowenter'、'onrowexit'、'onrowsdelete'、'onrowsinserted'、'onscroll'、'onselect','onselectionchange','onselectstart','onstart','onstop','onsubmit','onunload','javascript','script','eval','behaviour','expression','style','班级');$skipstr=implode('|',$skipkeys);$value=preg_replace(array("/($skipstr)/i"),'.',$value);如果(!preg_match("/^[\/|\s]?($allowtags)(\s+|$)/is",$value)){$值='';$replaces[]=empty($value)?'':“<”。str_replace('"','"',$value)。“>”;$html=str_replace($searchs,$replaces,$html);return$html;}//php防御注册和XSS攻击通过过滤器functionstring_htmlspecialchars($string,$flags=null){if(is_array($string)){foreach($stringas$key=>$val){$string[$key]=string_htmlspecialchars($val,$flags);}}else{if($flags===null){$string=str_replace(array('&','"','<','>'),array('&','"','<','>'),$字符串);if(strpos($string,'')!==false){$string=preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}))))/','&\\1',$string);}}else{if(PHP_VERSION<'5.4.0'){$string=htmlspecialchars($string,$flags);}else{如果(!defined('字符集')||(strtolower(CHARSET)=='utf-8')){$charset='UTF-8';}else{$charset='ISO-8859-1';}$string=htmlspecialchars($string,$flags,$charset);}}}return$string;}//----------------php反注入和XSS攻击通用过滤-----结束------------------------------------------//PHP设置PHP5.2及以上版本已经支持设置的HttpOnly参数,也支持全局HttpOnly的设置,在php.ini中--------------------------------------------------session.cookie_httponly=--------------------------------------------------将其值设置为1或TRUE来启用全局cookie的HttpOnly属性,当然也支持开启在代码中:Cookie操作函数setcookie函数和setrawcookie函数还特地增加了第七个参数作为HttpOnly的一个选项,开启方法为:旧版本的PHP更何况它没有被企业使用。