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.MVC的模板标签系统(二)
Sep 05 PHP
Ajax PHP分页演示
Jan 02 PHP
php过滤危险html代码
Aug 18 PHP
让PHP开发者事半功倍的十大技巧小结
Apr 20 PHP
php 提速工具eAccelerator 配置参数详解
May 16 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
php获取服务器端mac和客户端mac的地址支持WIN/LINUX
May 15 PHP
PHP生成条形图的方法
Dec 10 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
PHP实现简单ajax Loading加载功能示例
Dec 28 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
May 12 PHP
PHP中有关长整数的一些操作教程
Sep 11 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的历史和优缺点
2006/10/09 PHP
php 自写函数代码 获取关键字 去超链接
2010/02/08 PHP
php连接Access数据库错误及解决方法
2013/06/20 PHP
PHP实现获取文件后缀名的几种常用方法
2015/08/08 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
2019/03/11 PHP
YII框架页面缓存操作示例
2019/04/29 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
JQuery 学习笔记 element属性控制
2009/07/23 Javascript
jquery 问答知识整理
2010/02/11 Javascript
Prototype的Class.create函数解析
2011/09/22 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
JavaScript中eval函数的问题
2016/01/31 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
JS将unicode码转中文方法
2017/05/08 Javascript
Node.js 使用命令行工具检查更新
2017/06/08 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
vue mounted组件的使用
2018/06/18 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
[01:38]完美世界高校联赛决赛花絮
2018/12/02 DOTA
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
Golang与python线程详解及简单实例
2017/04/27 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python对wav文件的重采样实例
2020/02/25 Python
数控专业应届生求职信
2013/11/27 职场文书
银行批评与自我批评
2014/02/10 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
安全承诺书
2015/01/19 职场文书
行政人事专员岗位职责
2015/04/07 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python