YII Framework框架教程之安全方案详解
本文讲述了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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php日期与时间用法总结》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。
相关文章
Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1的解决方法
这篇文章主要为大家详细介绍了Windows Server 2012 R2或2016无法安装.NET Framework 3.5.1,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-07-06Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
这篇文章主要介绍了Zend Framework动作助手(Zend_Controller_Action_Helper)用法,详细分析了动作助手Zend_Controller_Action_Helper功能,定义,使用方法与相关实现代码,需要的朋友可以参考下...2016-03-10- 这篇文章主要介绍了yii数据库的查询方法,结合实例简单分析了直接查询和使用criteria进行查询的技巧,需要的朋友可以参考下...2015-12-31
Zend Framework动作助手Redirector用法实例详解
这篇文章主要介绍了Zend Framework动作助手Redirector用法,结合实例形式详细分析了转向器Redirector的功能,使用方法与相关注意事项,需要的朋友可以参考下...2016-03-10- 这篇文章主要介绍了win7安装php框架Yii的方法,较为详细的分析讲述了Yii框架的下载、安装及相应问题的解决方法,需要的朋友可以参考下...2016-01-26
- 这篇文章主要介绍了yii实现使用CUploadedFile上传文件的方法,结合具体的前端与后端处理代码实例分析了CUploadedFile类的使用方法,需要的朋友可以参考下...2015-12-31
- 这篇文章主要介绍了PHP的Yii框架入门使用教程,Yii是一个基于组件的高性能PHP框架,人气也非常高,需要的朋友可以参考下...2016-02-18
- 这篇文章主要介绍了如何在PHP的Yii框架中进行错误和异常处理的实例,重点讲解了使用错误处理器的方法,需要的朋友可以参考下...2016-03-21
无法启动.NET Framework NGEN v4.0.30319_X86服务的解决方法
这篇文章主要介绍了无法启动.NET Framework NGEN v4.0.30319_X86服务,需要的朋友可以参考下...2016-01-27- 这篇文章主要介绍了Zend Framework动作助手Json用法,结合实例形式分析了Zend Framework动作助手Json的功能与相关使用技巧,需要的朋友可以参考下...2016-03-10
- 本篇文章主要介绍了Yii2.0中使用js异步删除示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...2017-03-12
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
这篇文章主要介绍了Zend Framework教程之请求对象的封装Zend_Controller_Request用法,结合实例形式详细分析了请求对象封装的原理,使用方法与相关注意事项,需要的朋友可以参考下...2016-03-10Zend Framework教程之配置文件application.ini解析
这篇文章主要介绍了Zend Framework教程之配置文件application.ini用法,分析了配置文件application.ini中常见的配置项含义及用法,需要的朋友可以参考下...2016-03-12Zend Framework教程之模型Model基本规则和使用方法
这篇文章主要介绍了Zend Framework教程之模型Model基本规则和使用方法,结合实例形式详细分析了Zend Framework中模型的原理与具体使用技巧,需要的朋友可以参考下...2016-03-07- 这篇文章主要介绍了YII Framework框架教程之国际化实现方法,较为详细的分析了YII Framework框架国际化的原理与相关实现技巧,需要的朋友可以参考下...2016-03-17
- 这篇文章主要介绍了Zend Framework数据库操作方法,结合实例形式总结分析了Zend Framework数据库操作相关函数使用技巧与注意事项,需要的朋友可以参考下...2017-01-08
- 这篇文章主要介绍了在Mac OS上搭建PHP的Yii框架及相关测试环境的方法,Mac自带Apache与PHP等软件,因而搭建开发环境时非常舒适,需要的朋友可以参考下...2016-02-18
- 这篇文章主要介绍了Yii框架实现记录日志到自定义文件的方法,结合实例形式分析了Yii框架日志记录的原理及自定义日志记录的相关配置与实现技巧,需要的朋友可以参考下...2017-05-26
Zend Framework入门教程之Zend_Session会话操作详解
这篇文章主要介绍了Zend Framework入门教程之Zend_Session会话操作,结合实例形式详细分析了Zend_Session会话操作的具体使用技巧,需要的朋友可以参考下...2017-01-08Zend Framework教程之模型Model用法简单实例
这篇文章主要介绍了Zend Framework教程之模型Model用法,结合实例形式简单分析了Zend Framework中模型Model的原理,文件组织结构及具体使用方法,需要的朋友可以参考下...2016-03-07