YII Framework框架教程之安全方案详解


Posted in PHP onMarch 14, 2016

本文讲述了YII Framework框架的安全方案。分享给大家供大家参考,具体如下:

web应用的安全问题是很重要的,在“黑客”盛行的年代,你的网站可能明天都遭受着攻击,为了从某种程度上防止被攻击,YII提供了防止攻击的几种解决方案。当然这里讲的安全是片面的,但是值得一看。

官方提供的解决方案有:如下

1. 跨站脚本攻击的防范

跨站脚本攻击(简称 XSS),即web应用从用户收集用户数据。 攻击者常常向易受攻击的web应用注入JavaScript,VBScript,ActiveX,HTML或 Flash来迷惑访问者以收集访问者的信息。 举个例子,一个未经良好设计的论坛系统可能不经检查就显示用户所输入的内容。 攻击者可以在帖子内容中注入一段恶意的JavaScript代码。 这样,当其他访客在阅读这个帖子的时候,这些JavaScript代码就可以在访客的电脑上运行了。

一个防范XSS攻击的最重要的措施之一就是:在显示用户输入的内容之前进行内容检查。 比如,你可以对内容中的HTML进行转义处理。但是在某些情况下这种方法就不可取了,因为这种方法禁用了所有的HTML标签。

Yii集成了HTMLPurifier并且为开发者提供了一个很有用的组件CHtmlPurifier, 这个组件封装了HTMLPurifier类。它可以将通过有效的审查、安全和白名单功能来把所审核的内容中的所有的恶意代码清除掉,并且确保过滤之后的内容过滤符合标准。

CHtmlPurifier组件可以作为一个widget或者filter来使用。 当作为一个widget来使用的时候,CHtmlPurifier可以对在视图中显示的内容进行安全过滤。 以下是代码示例:

<?php $this->beginWidget('CHtmlPurifier'); ?>
//...这里显示用户输入的内容...
<?php $this->endWidget(); ?>

2. 跨站请求伪造攻击的防范

跨站请求伪造(简称CSRF)攻击,即攻击者在用户浏览器在访问恶意网站的时候,让用户的浏览器向一个受信任的网站发起攻击者指定的请求。 举个例子,一个恶意网站有一个图片,这个图片的src地址指向一个银行网站:http://bank.example/withdraw?transfer=10000&to=someone。 如果用户在登陆银行的网站之后访问了这个恶意网页,那么用户的浏览器会向银行网站发送一个指令,这个指令的内容可能是“向攻击者的帐号转账10000元”。 跨站攻击方式利用用户信任的某个特定网站,而CSRF攻击正相反,它利用用户在某个网站中的特定用户身份。

要防范CSRF攻击,必须谨记一条:GET请求只允许检索数据而不能修改服务器上的任何数据。 而POST请求应当含有一些可以被服务器识别的随机数值,用来保证表单数据的来源和运行结果发送的去向是相同的。

Yii实现了一个CSRF防范机制,用来帮助防范基于POST的攻击。 这个机制的核心就是在cookie中设定一个随机数据,然后把它同表单提交的POST数据中的相应值进行比较。

默认情况下,CSRF防范是禁用的。如果你要启用它,可以编辑应用配置 中的组件中的CHttpRequest部分。

代码示例:

return array(
  'components'=>array(
    'request'=>array(
      'enableCsrfValidation'=>true,
    ),
  ),
);

要显示一个表单,请使用CHtml::form而不要自己写HTML代码。因为CHtml::form可以自动地在表单中嵌入一个隐藏项,这个隐藏项储存着验证所需的随机数据,这些数据可在表单提交的时候发送到服务器进行验证。

3. Cookie攻击的防范

保护cookie免受攻击是非常重要的。因为session ID通常存储在Cookie中。 如果攻击者窃取到了一个有效的session ID,他就可以使用这个session ID对应的session信息。

这里有几条防范对策:

您可以使用SSL来产生一个安全通道,并且只通过HTTPS连接来传送验证cookie。这样攻击者是无法解密所传送的cookie的。

设置cookie的过期时间,对所有的cookie和seesion令牌也这样做。这样可以减少被攻击的机会。

防范跨站代码攻击,因为它可以在用户的浏览器触发任意代码,这些代码可能会泄露用户的cookie。

在cookie有变动的时候验证cookie的内容。

Yii实现了一个cookie验证机制,可以防止cookie被修改。启用之后可以对cookie的值进行HMAC检查。

Cookie验证在默认情况下是禁用的。如果你要启用它,可以编辑应用配置 中的组件中的CHttpRequest部分。

代码示例:

return array(
  'components'=>array(
    'request'=>array(
      'enableCookieValidation'=>true,
    ),
  ),
);

一定要使用经过Yii验证过的cookie数据。使用Yii内置的cookies组件来进行cookie操作,不要使用$_COOKIES。

// 检索一个名为$name的cookie值
$cookie=Yii::app()->request->cookies[$name];
$value=$cookie->value;
......
// 设置一个cookie
$cookie=new CHttpCookie($name,$value);
Yii::app()->request->cookies[$name]=$cookie;

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php中对xml读取的相关函数的介绍一
Jun 05 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php之XML转数组函数的详解
Jun 07 PHP
preg_match_all使用心得分享
Jan 31 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
完美解决thinkphp验证码出错无法显示的方法
Dec 09 PHP
php递归实现无限分类的方法
Jul 28 PHP
通过PHP简单实例介绍文件上传
Dec 16 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
PHP Smarty模版简单使用方法
Mar 30 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
php回调函数处理数组操作示例
Apr 13 PHP
YII Framework框架教程之日志用法详解
Mar 14 #PHP
YII Framework教程之异常处理详解
Mar 14 #PHP
Zend Framework教程之Application用法实例详解
Mar 14 #PHP
Zend Framework自定义Helper类相关注意事项总结
Mar 14 #PHP
Zend Framework教程之Bootstrap类用法概述
Mar 14 #PHP
如何解决PHP使用mysql_query查询超大结果集超内存问题
Mar 14 #PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 #PHP
You might like
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
多文件上载系统完整版
2006/10/09 PHP
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
Jquery中对数组的操作代码
2011/08/12 Javascript
导航跟随滚动条置顶移动示例代码
2013/09/11 Javascript
jquery 提示信息显示后自动消失的具体实现
2013/12/18 Javascript
jQuery实现跟随鼠标运动图层效果的方法
2015/02/02 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
jquery Easyui快速开发总结
2015/08/20 Javascript
JavaScript动态插入CSS的方法
2015/12/10 Javascript
原生js封装的一些jquery方法(详解)
2016/09/20 Javascript
微信小程序 仿猫眼实现实例代码
2017/03/14 Javascript
React如何避免重渲染
2018/04/10 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
利用Webpack实现小程序多项目管理的方法
2019/02/25 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
vue2.x 对象劫持的原理实现
2020/04/19 Javascript
[27:02]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第三场
2014/05/24 DOTA
python 3.6 +pyMysql 操作mysql数据库(实例讲解)
2017/12/20 Python
python游戏开发之视频转彩色字符动画
2019/04/26 Python
CSS3田字格列表的样式编写方法
2018/11/22 HTML / CSS
HTML5应用之文件上传
2016/12/30 HTML / CSS
使用canvas对多图片拼合并导出图片的方法
2018/08/28 HTML / CSS
布里斯班女装时尚品牌:Adrift
2017/12/28 全球购物
德国高尔夫商店:Par71.de
2020/11/29 全球购物
写一个函数返回1+2+3+…+n的值(假定结果不会超过长整型变量的范围)
2014/09/05 面试题
护士进修自我鉴定
2014/02/07 职场文书
《小山羊和小灰兔》教学反思
2014/02/19 职场文书
幼儿园亲子活动总结
2014/04/26 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
节约每一滴水演讲稿
2014/09/09 职场文书
成事在人观后感
2015/06/16 职场文书
安全伴我行主题班会
2015/08/13 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书