PHP如何防止XSS攻击与XSS攻击原理的讲解


Posted in PHP onMarch 22, 2019

XSS又称CSS,全称Cross SiteScript(跨站脚本攻击), XSS攻击类似于SQL注入攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie信息、破坏页面结构、重定向到其它网站等。

理论上,只要存在能提供输入的表单并且没做安全过滤或过滤不彻底,都有可能存在XSS漏洞。

下面是一些最简单并且比较常见的恶意字符XSS输入:

1.XSS 输入通常包含 JavaScript 脚本,如弹出恶意警告框:<script>alert("XSS");</script>

2.XSS 输入也可能是 HTML 代码段,譬如:

  • (1).网页不停地刷新 <meta http-equiv="refresh" content="0;">
  • (2).嵌入其它网站的链接 <iframe src=http://xxxx width=250 height=250></iframe>

除了通过正常途径输入XSS攻击字符外,还可以绕过JavaScript校验,通过修改请求达到XSS攻击的目的,如下图:

PHP如何防止XSS攻击与XSS攻击原理的讲解

了解到XSS攻击的原理和危害后,其实要预防也不难,下面提供一个简单的PHP防止XSS攻击的函数:

<?PHP
/**
 * @param $string
 * @param $low 安全别级低
 */
function clean_xss(&$string, $low = False)
{
 if (! is_array ( $string ))
 {
 $string = trim ( $string );
 $string = strip_tags ( $string );
 $string = htmlspecialchars ( $string );
 if ($low)
 {
  return True;
 }
 $string = str_replace ( array ('"', "\\", "'", "/", "..", "../", "./", "//" ), '', $string );
 $no = '/%0[0-8bcef]/';
 $string = preg_replace ( $no, '', $string );
 $no = '/%1[0-9a-f]/';
 $string = preg_replace ( $no, '', $string );
 $no = '/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]+/S';
 $string = preg_replace ( $no, '', $string );
 return True;
 }
 $keys = array_keys ( $string );
 foreach ( $keys as $key )
 {
 clean_xss ( $string [$key] );
 }
}
//just a test
$str = 'codetc.com<meta http-equiv="refresh" content="0;">';
clean_xss($str); //如果你把这个注释掉,你就知道xss攻击的厉害了
echo $str;
?>

PHP中的设置

PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中

-----------------------------------------------------
session.cookie_httponly = 
-----------------------------------------------------

设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:

<?php ini_set("session.cookie_httponly", 1);  
// or session_set_cookie_params(0, NULL, NULL, NULL, TRUE);  
?>

Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:

<?php 
setcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE);  
setrawcookie("abc", "test", NULL, NULL, NULL, NULL, TRUE); 
?>

老版本的PHP就不说了。没企业用了吧。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

PHP 相关文章推荐
PHP XML操作类DOMDocument
Dec 16 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
php过滤XSS攻击的函数
Nov 12 PHP
PHP函数microtime()用法与说明
Dec 04 PHP
php获取参数的几种方法总结
Feb 18 PHP
将CMYK颜色值和RGB颜色相互转换的PHP代码
Jul 28 PHP
列举PHP的Yii 2框架的开发优势
Jul 03 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
对比PHP对MySQL的缓冲查询和无缓冲查询
Jul 01 PHP
php可变长参数处理函数详解
Feb 22 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
Mar 22 #PHP
简单实用的PHP文本缓存类实例
Mar 22 #PHP
PHP设计模式之PHP迭代器模式讲解
Mar 22 #PHP
ThinkPHP5.1表单令牌Token失效问题的解决
Mar 22 #PHP
PHP iconv()函数字符编码转换的问题讲解
Mar 22 #PHP
PHP里的$_GET数组介绍
Mar 22 #PHP
PHP匿名函数(闭包函数)详解
Mar 22 #PHP
You might like
php代码检查代理ip的有效性
2016/08/19 PHP
laravel 解决Validator使用中出现的问题
2019/10/25 PHP
JavaScript加密解密7种方法总结分析
2007/10/07 Javascript
jquery.validate使用攻略 第一部
2010/07/01 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
javascript 回调函数详解
2014/11/11 Javascript
AngularJS基础知识笔记之表格
2015/05/10 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
vue弹窗插件实战代码
2018/09/08 Javascript
通过Kettle自定义jar包供javascript使用
2020/01/29 Javascript
Element el-button 按钮组件的使用详解
2021/02/01 Javascript
使用python搭建Django应用程序步骤及版本冲突问题解决
2013/11/19 Python
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python 根据正则表达式提取指定的内容实例详解
2016/12/04 Python
浅谈Python对内存的使用(深浅拷贝)
2018/01/17 Python
django使用admin站点上传图片的实例
2019/07/28 Python
python爬虫添加请求头代码实例
2019/12/28 Python
python matplotlib中的subplot函数使用详解
2020/01/19 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
python opencv肤色检测的实现示例
2020/12/21 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
使用CSS3实现圆角,阴影,透明
2014/12/23 HTML / CSS
浅谈基于HTML5的在线视频播放方案
2016/02/18 HTML / CSS
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
Java Servlet API中forward() 与redirect()的区别
2014/04/20 面试题
院领导写的就业推荐信
2014/03/09 职场文书
简单租房协议书
2014/04/09 职场文书
事假请假条范文
2014/04/11 职场文书
美丽家庭事迹材料
2014/05/03 职场文书
工作失误检讨书(经典集锦版)
2014/10/17 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
施工现场安全管理制度
2015/08/05 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android