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;

时间: 2024-10-10 12:33:14

Yii 安全防范的相关文章

与《YII框架》不得不说的故事—5篇目录

与<YII框架>不得不说的故事—基础篇 第1章 课程目标 1-1 课程目标 (00:54) 第2章 课前知识准备 2-1 YII的启动和安装 (05:12) 2-2 YII请求处理流程 (02:44) 2-3 命名空间 (10:46) 第3章 控制器 3-1 控制器的创建 (03:22) 3-2 控制器之请求处理 (05:58) 3-3 控制器之响应处理 (09:09) 3-4 控制器之session处理 (09:25) 3-5 控制器之cookie处理 (09:11) 第4章 视图 4-1

[翻译]如何用YII写出安全的WEB应用

前言 虽然本文是基于YII1.1,但其中提到的安全措施适用于多数web项目安全场景,所以翻译此文,跟大家交流.原文地址. 目录 安全基本措施... 2 验证与过滤用户的输入信息... 2 原理... 2 客户端验证... 2 YII如何防范... 2 跨站脚本攻击XSS. 4 原理... 4 YII如何防范... 5 SQL注入... 7 原理... 7 YII如何防范... 8 跨站请求伪造CSRF. 12 配置WEB服务器... 12 PHP项目一些有用的指令... 15 授权... 16

爱创课堂每日一题第十二天 XSS原理及防范?

Xss(cross-site scripting)攻击指的是攻击者往Web页面里插入恶意 html标签或者javascript代码.比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie中的用户私密信息:或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点.XSS防范方法首先代码里对用户输入的地方和变量都需要仔细检查长度和对"<",">",";",&q

详细说明php的4中开源框架(TP,CI,Laravel,Yii)

ThinkPHP简称TP,TP借鉴了Java思想,基于PHP5,充分利用了PHP5的特性,部署简单只需要一个入口文件,一起搞定,简单高效.中文文档齐全,入门超级简单.自带模板引擎,具有独特的数据验证和自动填充功能,框架更新速度比较速度. 优点:这个框架易使用 易学 安全 对bae sae支持很好提供的工具也很强大 可以支持比较大的项目开发 易扩展 全中文文档 总的来说这款框架适合非常适合国人使用 性能 上比CI还要强一些 缺点:配置对有些人来说有些复杂(其实是因为没有认真的读过其框架源码)文档有

Yii 视图自定义

Yii  zii.widgets.grid.CGridView 视图的自定义.这个很常用,一般用yii gii 自动生成的模块都有这个组建.有时需要对这个组建进行自定义,常见如下: 1:name 属性是必须要有的,表示是 对应的标签的某个属性. 2:value 属性,是页面中,这个字段展示的内容,gen_rej_label 是一个php函数,这个函数根据 数据源的id 和 rej_reason 这两个字段生成需要的html 标签,可以根据需求自己去实现这个函数. 3:type raw这个属性,这

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建

php的yii框架下开发环境xampp,vim,xdebug,DBGp的搭建 选择Linux桌面环境Deepin2014.1下开发网站的理由很简单,能截图,有搜狗输入法,可以WPS文档记录,终端下复制粘贴很容易,相比ubuntu,fedora死机次数少了,对,就是不用折腾,自带的. 先说vim和DBGp插件. Deepin2014.1简体中文,自带的vim7.4版本,很多配置已经很适合大陆的人使用了,比如Php和Python的调试支持等,不需要重新编译了.可以节省不少步骤.这里提供一个vim的配

Yii中的CComponent应用实例

首先我们先了解一下如何创建一个CComponent,手册讲述如下: CComponent 是所有组件类的基类. CComponent 实现了定义.使用属性和事件的协议. 属性是通过getter方法或/和setter方法定义.访问属性就像访问普通的对象变量.读取或写入属性将调用应相的getter或setter方法,例如: 1 2 $a=$component->text;     // equivalent to $a=$component->getText(); $component->t

Yii php 环境配置on ubuntu 12.04

ubuntu 12.04自带的php版本是5.3.x的,不支持explode(...)[]的语法,故升级到5.4.x. aptitude install python-software-properties add-apt-repository ppa:ondrej/php5-oldstable aptitude update aptitude upgrade Yii安装依赖: aptitude install php5-mysql Yii php 环境配置on ubuntu 12.04,布布扣

Yii隐藏单入口

Yii进入项目首页时默认是index.php文件路径,如何把index.php去掉,方法如下: 打开apache配置文件http.conf,找到如下的代码: #LoadModule rewrite_module modules/mod_rewrite.so 把前面的#号去掉. 往下继续查找,找到<Directory "d:/wamp/www/">,即服务器所在的目录, AllowOverride all AllowOverride 后面改为all,如上所示. 重启apach