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 错误之引号中使用变量
May 04 PHP
php str_pad 函数用法简介
Jul 11 PHP
php实现首页链接查询 友情链接检查的代码
Jan 05 PHP
php 修改zen-cart下单和付款流程以防止漏单
Mar 08 PHP
PHP基础教程(php入门基础教程)一些code代码
Jan 06 PHP
标准PHP的AES加密算法类
Mar 12 PHP
Yii2超好用的日期和时间组件(值得收藏)
May 05 PHP
php网页版聊天软件实现代码
Aug 12 PHP
php unicode编码和字符串互转的方法
Aug 12 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 26 PHP
php正确输出json数据的实例讲解
Aug 21 PHP
浅谈Laravel模板实体转义带来的坑
Oct 22 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中Collection 类的设计
2013/06/21 PHP
PHP实现将科学计数法转换为原始数字字符串的方法
2014/12/16 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
Thinkphp5结合layer弹窗定制操作结果页面
2017/07/07 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
jquery实现简单的表单验证
2015/11/17 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)
2016/08/11 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
js实现密码强度检验
2017/01/15 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
2017/03/17 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
Vue点击切换颜色的方法
2018/09/13 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
微信小程序生成海报分享朋友圈的实现方法
2019/05/06 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
[01:27:44]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第一场 1月24日
2021/03/11 DOTA
python基于windows平台锁定键盘输入的方法
2015/03/05 Python
pycharm设置注释颜色的方法
2018/05/23 Python
python实现时间o(1)的最小栈的实例代码
2018/07/23 Python
Python如何实现动态数组
2019/11/02 Python
Python算法中的时间复杂度问题
2019/11/19 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物
应用化学专业职业生涯规划书
2014/01/22 职场文书
人事主管岗位职责
2014/01/30 职场文书
家长会学生演讲稿
2014/04/26 职场文书
单位绩效考核方案
2014/05/11 职场文书
党员自评材料范文
2014/12/17 职场文书
英文道歉信
2015/01/20 职场文书
暑期社会实践新闻稿
2015/07/17 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
python脚本框架webpy的url映射详解
2021/11/20 Python
《辉夜大小姐想让我告白》第三季正式预告
2022/03/20 日漫
详解Python内置模块Collections
2022/03/22 Python
Python pyecharts案例超市4年数据可视化分析
2022/08/14 Python