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入门
Oct 09 PHP
PHP通过COM使用ADODB的简单例子
Dec 31 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
May 04 PHP
php格式化日期和时间格式化示例分享
Feb 24 PHP
PHP二维数组排序的3种方法和自定义函数分享
Apr 09 PHP
php生成百度sitemap站点地图类函数实例
Oct 17 PHP
php使用pdo连接mssql server数据库实例
Dec 25 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
Dec 22 PHP
php微信支付接口开发程序
Aug 02 PHP
PHP中仿制 ecshop验证码实例
Jan 06 PHP
PHP简单留言本功能实现代码
Jun 09 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 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
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
PHP如何利用P3P实现跨域
2013/08/24 PHP
输入值/表单提交参数过滤有效防止sql注入的方法
2013/12/25 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
2018/05/21 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
常用的几段javascript代码分享
2014/03/25 Javascript
js、jquery图片动画、动态切换示例代码
2014/06/03 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
webpack踩坑之路图片的路径与打包
2017/09/05 Javascript
深入理解ES6 Promise 扩展always方法
2017/09/26 Javascript
js DOM的事件常见操作实例详解
2019/12/16 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
JavaScript实现筛选数组
2021/03/02 Javascript
[01:52]深扒TI7聊天轮盘语音出处7
2017/05/11 DOTA
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python类装饰器实现方法详解
2018/12/21 Python
Python简易版图书管理系统
2019/08/12 Python
python飞机大战pygame游戏框架搭建操作详解
2019/12/17 Python
Python3实现飞机大战游戏
2020/04/24 Python
python实现视频压缩功能
2020/12/18 Python
国际花店:Pickup Flowers
2020/04/10 全球购物
几个Shell Script面试题
2012/08/31 面试题
秋季红领巾广播稿
2014/01/27 职场文书
四年大学自我鉴定
2014/02/17 职场文书
绿色环保口号
2014/06/12 职场文书
演讲稿开场白台词
2014/08/25 职场文书
四风问题个人自查剖析材料思想汇报
2014/09/21 职场文书
学校党委干部个人对照检查材料思想汇报
2014/10/09 职场文书
python 用递归实现通用爬虫解析器
2021/04/16 Python