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 相关文章推荐
Zend的Registry机制的使用说明
May 02 PHP
PHP错误提示的关闭方法详解
Jun 23 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php中strstr、strrchr、substr、stristr四个函数的区别总结
Sep 22 PHP
php天翼开放平台短信发送接口实现方法
Dec 22 PHP
PHP中的替代语法介绍
Jan 09 PHP
php截取html字符串及自动补全html标签的方法
Jan 15 PHP
php单链表实现代码分享
Jul 04 PHP
[原创]PHP正则匹配中英文、数字及下划线的方法【用户名验证】
Aug 01 PHP
php设计模式之单例模式用法经典示例分析
Sep 20 PHP
php传值和传引用的区别点总结
Nov 19 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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 GD 图像处理组件的常用函数总结
2010/04/28 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
PHP不使用递归的无限级分类简单实例
2016/11/05 PHP
PHP8.0新功能之Match表达式的使用
2020/07/19 PHP
Hutia 的 JS 代码集
2006/10/24 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
jquery调取json数据实现省市级联的方法
2015/01/29 Javascript
JavaScript中的条件判断语句使用详解
2015/06/03 Javascript
jQuery Form 表单提交插件之formSerialize,fieldSerialize,fieldValue,resetForm,clearForm,clearFields的应用
2016/01/23 Javascript
jQuery防止重复绑定事件的解决方法
2016/05/14 Javascript
动态的9*9乘法表效果的实现代码
2016/05/16 Javascript
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
详解vue-cli 3.0 build包太大导致首屏过长的解决方案
2018/11/10 Javascript
jQuery选择器之层次选择器用法实例分析
2019/02/19 jQuery
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
读写json中文ASCII乱码问题的解决方法
2016/11/05 Python
python微信跳一跳系列之棋子定位像素遍历
2018/02/26 Python
实例详解Python装饰器与闭包
2019/07/29 Python
基于python2.7实现图形密码生成器的实例代码
2019/11/05 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
css3与html5实现响应式导航菜单(导航栏)效果分享
2014/02/12 HTML / CSS
阿迪达斯芬兰官方网站:adidas芬兰
2017/01/30 全球购物
DC Shoes荷兰官方网站:美国极限运动品牌
2019/10/22 全球购物
企业为何需要商业计划书
2013/12/26 职场文书
工作的心得体会
2013/12/31 职场文书
酒店个人求职信范文
2014/01/25 职场文书
40岁生日感言
2014/02/15 职场文书
事务机电主管工作职责
2014/02/25 职场文书
党风廉政承诺书
2014/03/27 职场文书
人事任命书怎么写
2014/06/05 职场文书
综合管理员岗位职责
2015/02/11 职场文书
医院财务人员岗位职责
2015/04/14 职场文书
2016高三毕业赠言寄语
2015/12/04 职场文书
《全神贯注》教学反思
2016/02/22 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
python数字图像处理之图像自动阈值分割示例
2022/06/28 Python