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数组合并array_merge()函数使用注意事项
Jun 19 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
php array_merge函数使用需要注意的一个问题
Mar 30 PHP
PHP中余数、取余的妙用
Jun 29 PHP
如何把php5.3版本升级到php5.4或者php5.5
Jul 31 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
php实现水印文字和缩略图的方法示例
Dec 29 PHP
php 从一个数组中随机的取出若干个不同的数实例
Dec 31 PHP
Laravel学习教程之request validation的编写
Oct 25 PHP
PHP+Apache实现二级域名之间共享cookie的方法
Jul 24 PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 PHP
php自动加载代码实例详解
Feb 26 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
解析thinkphp基本配置 convention.php
2013/06/18 PHP
Yii操作数据库的3种方法
2014/03/11 PHP
PHP中的Iterator迭代对象属性详解
2019/04/12 PHP
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
JS弹出对话框返回值代码(asp.net后台)
2010/12/28 Javascript
javascript动画对象支持加速、减速、缓入、缓出的实现代码
2012/09/30 Javascript
JQuery中form验证出错信息的查看方法
2013/10/08 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
JS来动态的修改url实现对url的增删查改
2014/09/05 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
url中的特殊符号有什么含义(推荐)
2016/06/17 Javascript
【经验总结】编写JavaScript代码时应遵循的14条规律
2016/06/20 Javascript
JS提示:Uncaught SyntaxError: Unexpected token ILLEGAL错误的解决方法
2016/08/19 Javascript
JavaScript基础进阶之数组方法总结(推荐)
2017/09/04 Javascript
使用JS实现气泡跟随鼠标移动的动画效果
2017/09/16 Javascript
深入理解Vuex 模块化(module)
2017/09/26 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
JS原型与继承操作示例
2019/05/09 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
详解python函数传参是传值还是传引用
2018/01/16 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
Python WEB应用部署的实现方法
2019/01/02 Python
python实现两张图片的像素融合
2019/02/23 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
2020/01/20 Python
python列表返回重复数据的下标
2020/02/10 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
ESDlife健康生活易:身体检查预订、搜寻及比较
2019/05/10 全球购物
印度第一网上礼品店:IGP.com
2020/02/06 全球购物
存储过程和函数的区别
2013/05/28 面试题
给领导的致歉信范文
2014/01/13 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
学生检讨书
2015/01/27 职场文书
整改通知书
2015/04/20 职场文书