文档章节

Yii 安全防范

drewin
 drewin
发布于 2014/10/22 17:29
字数 1266
阅读 143
收藏 16

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;


本文转载自:http://wenku.baidu.com/link?url=JvZAot7fiQb7UJLo4fw0m-td933Fehcg7ju5Q6ehM-wWJaON0jGq82beTBkZG_u3P...

共有 人打赏支持
drewin
粉丝 28
博文 121
码字总数 43979
作品 0
海淀
程序员
私信 提问
记录Yii2框架开发遇到微信错误提示

转载地址 记录Yii2框架开发遇到微信错误提示 微信公共号开发,提示“该公众号暂时无法提供服务,请稍后再试”,如何解决? 以前使用Yii框架的时候,并没有像Yii2,以前的Yii框架似乎用起来在...

durban
2018/07/22
0
0
Yii2 Unable to verify your data submission 错误-CSRF

Yii2 功能很是强大,组件化编程很高大上,全栈编程很容易,但我觉得日常的开发中还是有很大一部分人会去手写表单之类的,为了配合前端的工作,或者懒得再去学这套堪比一门新语言的组件语法....

big_cat
2016/02/01
345
2
选择 Yii 2 框架的 7 个理由

去年,SitePoint网站发布了一篇文章重点介绍了一些顶尖的PHP开发框架。 排名第四的是Yii(发音同Yee)框架。 那时Yii框架最新的版本是1.1.14。最近,Yii 2.0版发布了,你可以在产品中使用2.0...

oschina
2014/10/16
18K
66
这些最热门的 PHP 框架,哪一款是你的菜?

原文出处:opensource 译文出处:开源中国—两味真火 PHP 是世界上最流行的编程语言之一,广泛用于主要的项目中。例如,Facebook 就是利用 PHP 来创建和维护他们的内部系统;WordPress 内部基...

opensource
2016/12/27
0
0
Yii 2.0.5 发布,安全修复版本!

Yii 2.0.5 发布,此版本是安全修复版本,在 类中发现了安全问题,强烈建议每位用户都升级至最新版本。漏洞存在于 ViewAction action,可以在硬盘上执行任意的 PHP 文件 (以 结尾的文件) ,通...

oschina
2015/07/12
2.2K
11

没有更多内容

加载失败,请刷新页面

加载更多

广而告之

【全民云计算】云主机低至两折

SummerGao
13分钟前
0
0
【机器学习PAI实战】—— 玩转人工智能之利用GAN自动生成二次元头像

前言 深度学习作为人工智能的重要手段,迎来了爆发,在NLP、CV、物联网、无人机等多个领域都发挥了非常重要的作用。最近几年,各种深度学习算法层出不穷, Generative Adverarial Network(GAN...

zhaowei121
16分钟前
0
0
0326 第七次课:vim

VIM工具 一、vim介绍 vim与vi的区别 vim是vi的升级版,vim与vi最大的区别是vim带有颜色显示。 使用vim需要安装:yum -y install yum vim三种模式: 一般模式、编辑模式、命令模式 模式 说明 ...

wxy丶
18分钟前
0
0
nmap扫描主机存活情况

nmap -sP -iL ip.txt -oG ip_output.txt -sP (Ping扫描) -iL(从列表中输入) -oG (Grep输出) nmap -sP --min-hostgroup 1024 --min-parallelism 1024 -iL ip.txt -oG ip_output1113.txt......

Frost729
26分钟前
0
0
Java开发找工作最懵圈的问题:到底啥是分布式系统开发经验?

前言 现在有很多Java技术方向的同学在找工作的时候,肯定都会去招聘网站上找职位投递简历。 但是在很多职位JD上往往会有这样的一个要求:熟悉分布式系统理论、设计和开发,具备复杂分布式系统...

Java爬坑之路
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部