php预防XSS攻击,ajax跨域攻击的方法

对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlspecialchars,strip_tags这些函数都使用上了也不一定能保证绝对的安全。

现在有很多php开发框架都提供关于防XSS攻击的过滤方法,下面和大家分享一个预防XSS攻击和ajax跨域攻击的函数,摘自某开发框架,相比于仅仅使用内置函数应该还是够强了的吧。

function xss_clean($data){	// Fix &entity\n;	$data=str_replace(array('&','<','>'),array('&','<','>'),$data);	$data=preg_replace('/(&#*\w+)[\x00-\x20]+;/u','$1;',$data);	$data=preg_replace('/(&#x*[0-9A-F]+);*/iu','$1;',$data);	$data=html_entity_decode($data,ENT_COMPAT,'UTF-8');	// Remove any attribute starting with "on" or xmlns	$data=preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:onxmlns)[^>]*+>#iu','$1>',$data);	// Remove javascript: and vbscript: protocols	$data=preg_replace('#([a-z]*)[\x00-\x20]*=[\x00-\x20]*([`\'"]*)[\x00-\x20]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu','$1=$2nojavascript...',$data);	$data=preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iu','$1=$2novbscript...',$data);	$data=preg_replace('#([a-z]*)[\x00-\x20]*=([\'"]*)[\x00-\x20]*-moz-binding[\x00-\x20]*:#u','$1=$2nomozbinding...',$data);	// Only works in IE: 	$data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?expression[\x00-\x20]*\([^>]*+>#i','$1>',$data);	$data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?behaviour[\x00-\x20]*\([^>]*+>#i','$1>',$data);	$data=preg_replace('#(<[^>]+?)style[\x00-\x20]*=[\x00-\x20]*[`\'"]*.*?s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:*[^>]*+>#iu','$1>',$data);	// Remove namespaced elements (we do not need them)	$data=preg_replace('#]*+>#i','',$data);	// http://www.Alixixi.com/	do{// Remove really unwanted tags		$old_data=$data;		$data=preg_replace('#]*+>#i','',$data);	}while($old_data!==$data);	// we are done...	return $data;}

您可能感兴趣的文章

  • 通用的PHP防注入漏洞攻击的过滤函数代码
  • PHP检查浏览器参数防止被SQL注入的函数
  • php提取身份证号码中的生日日期以及验证是否为未成年人的函数
  • jquery+html+php 实现Ajax无刷新文件上传
  • 防止网站被攻击的办法
  • smarty模板中使用php函数以及smarty模板中如何对一个变量使用多个函数
  • php 输出昨天,今天,明天是星期几的方法
  • 强大的PHP 图片处理类(水印、透明度、缩放、锐化、旋转、翻转、剪切、反色)



郑重声明:本文版权包含图片归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们(delete@yzlfxy.com)修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)
昵称:
匿名发表
   
验证码: