> php教程 > php手册 > php预防XSS攻击,ajax跨域攻击的方法

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

WBOY
풀어 주다: 2016-06-21 08:48:07
원래의
851명이 탐색했습니다.

对网站发动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: <span style="width: expression(alert('Ping!'));"></span>
	$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('#</*\w+:\w[^>]*+>#i','',$data);
	// http://www.Alixixi.com/
	do{// Remove really unwanted tags
		$old_data=$data;
		$data=preg_replace('#</*(?:appletb(?:asegsoundlink)embedframe(?:set)?i(?:framelayer)l(?:ayerink)metaobjects(?:cripttyle)titlexml)[^>]*+>#i','',$data);
	}while($old_data!==$data);
	// we are done...
	return $data;
}
로그인 후 복사

您可能感兴趣的文章

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



관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿