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 相关文章推荐
全文搜索和替换
Oct 09 PHP
中篇:安装及配置PHP
Dec 13 PHP
坏狼的PHP学习教程之第1天
Jun 15 PHP
php设计模式 Builder(建造者模式)
Jun 26 PHP
php数组函数序列之next() - 移动数组内部指针到下一个元素的位置,并返回该元素值
Oct 31 PHP
深入了解 register_globals (附register_globals=off 网站打不开的解决方法)
Jun 27 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
php使用正则过滤js脚本代码实例
May 10 PHP
php构造方法中析构方法在继承中的表现
Apr 12 PHP
基于Laravel实现的用户动态模块开发
Sep 21 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+ajax 无刷新删除数据
2010/02/20 PHP
php对数组排序代码分享
2014/02/24 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
2016/11/05 PHP
PHP实现的mysql读写分离操作示例
2018/05/22 PHP
从零开始学习jQuery (三) 管理jQuery包装集
2011/02/23 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
JS实现星星评分功能实例代码(两种方法)
2016/06/09 Javascript
使用JS组件实现带ToolTip验证框的实例代码
2017/08/23 Javascript
vue实现简单loading进度条
2018/06/06 Javascript
微信小程序 WXML节点信息查询详解
2019/07/29 Javascript
layui 根据后台数据动态创建下拉框并同时默认选中的实例
2019/09/02 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
JavaScript中继承原理与用法实例入门
2020/05/09 Javascript
Vue实现菜单切换功能
2020/11/08 Javascript
Python对列表排序的方法实例分析
2015/05/16 Python
详解Python函数作用域的LEGB顺序
2016/05/14 Python
Python按行读取文件的简单实现方法
2016/06/22 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
分分钟入门python语言
2018/03/20 Python
使用python 将图片复制到系统剪贴中
2019/12/13 Python
Python3 利用face_recognition实现人脸识别的方法
2020/03/13 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
Python3 用matplotlib绘制sigmoid函数的案例
2020/12/11 Python
Mavi牛仔裤美国官网:土耳其著名牛仔品牌
2016/09/24 全球购物
Lancer Skincare官方网站:抗衰老皮肤护理
2020/11/20 全球购物
运动会通讯稿500字
2014/02/20 职场文书
期末评语大全
2014/05/04 职场文书
我的中国梦演讲稿初中篇
2014/08/19 职场文书
自主招生学校推荐信
2014/09/26 职场文书
入股协议书范本
2014/11/01 职场文书
技术负责人岗位职责
2015/02/10 职场文书
大学生个人简历自我评价
2015/03/11 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
观看《筑梦中国》纪录片心得体会
2016/01/18 职场文书