Ourren

关注技术,记录生活.

YII开发需要注意的安全问题

| 留言

yii_security

前沿

接触YII开发已经有一些日子了,虽然YII把MVC的思想在PHP语言上发挥得淋漓尽致,但是在实际的YII开发中稍不注意还是会引起很多安全问题,本文主要对YII开发中需要注意的安全问题进行总结,方便后来开发者对此引起重视。

1.越权攻击

越权攻击可能跟MVC架构相关,YII虽然提供了基于RBAC的接口,同时auth插件将RBAC理念直接图形化操作,但是在实际的编程中使用基于RBAC认证的应用可能不是很多,因此直接采用系统默认的accessControl可能就会存在一些问题,例如在修改和删除操作的时候,如果采用系统默认的判定是无法实现业余系统的功能的,因为在更新或者删除的时候需要对所有权进行判定(即:该条数据是否属于当前用户),一般可以采用如下的规则进行判定:

$currentid = Yii::app()->user->getId();
if($model->uid === $currentid)
{
    //do something after auth
} 
else
{
    throw new CHttpException(400,'not allow');
}

2.注入攻击

目前框架类语言在防止注入攻击方面做得还是不错的,一般主要按照框架提供数据库类进行操纵即可,YII框架在数据方面的操作也不例外,在插入、更新、删除、查询方面YII封装了很多类和函数,操作数据库的时候建议直接采用这些函数即可,不要用拼接字符串进行操作,例如,查询是经常遇到的操作,一般都是采用CDbCriteria类添加条件并查询:

//compare createtime
$criteria = new CDbCriteria;
$criteria->addCondition('createtime>:btime');
$criteria->params[':btime'] = $btime;

$criteria->addCondition('createtime<:etime');
$criteria->params[':etime'] = $etime;
$criteria->order = 'id desc';
$retarr = XXX::model()->findAll($criteria);

3.跨站请求伪造攻击

针对跨站请求伪造攻击CSRF攻击,YII直接提供了配置中全局进行CSRF防御,具体操作是在config/main.php中设置:

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

4.跨站攻击防御

跨站攻击主要针对客户端浏览器这块,YII在跨站方面方面主要有以下几种处理办法。

  • httponly

XSS跨站攻击主要针对盗取cookie或者通过XSS进行CSRF或者钓鱼攻击,先通过设置httponly可以在一定程度上降低XSS攻击,具体设置办法在config/main.php中设置:

//csrf cookie httponly
'request'=>array(
    'enableCsrfValidation' => true,
    'enableCookieValidation'=>true,
    'csrfCookie'=>array(
            'httpOnly'=>true,
    ),
),
//session httonly
'session' => array(
        'cookieParams' => array(
                'httponly' => true,
        ),
),
  • 编码/转义

针对用户需要在特定情况下输入数据,而这些数据是用户可以通过输入可以控制的数据。这时需要对该类数据进行编码处理,否则容易引起跨站攻击,一般主要有两种处理方法: 1.针对简单的文本处理 可以直接采用CHtml类的encode函数进行处理,该函数采用HTML编码方法对数据进行编码(即会对”<“,”>“,‘”’,“&”,“ ”. etc).

CHtml::encode($var);

2.针对富文本处理 在富文本情况下,处理相对比较复杂,主要可以通过YII提供的widget进行处理,实际处理代码如下:

beginWidget('CHtmlPurifier');
    echo $model->something; 
    $this->endWidget();
 ?>
需要注意的问题,需要php开启:php-dom 或者php-xml。例如centos可以运行如下命令:
yum install php-dom

Reference