php - Yii CSRF 禁用操作

标签 php yii csrf

我从不同的 Controller 和子域发送相同的表单数据。但在一种情况下,我需要禁用 CSRF 验证。

例子:

登录表单:

  • 位置一:example.com主页

  • 位置 2:account.example.com/login

  • 位置 3:gate.example.com

而且我需要禁用验证以防万一我将数据从位置 1 发送到位置 2。

我使用了 $form = $this->beginWidget('CActiveForm',...

我该怎么做?

我猜 csrf cookie 不是跨域的!

最佳答案

CSRF 验证发生在网页加载过程的早期,甚​​至在调用 Controller 之前。您想要覆盖 CHttpRequest 类以告诉它忽略某些路由。

protected/components 文件夹中创建一个名为 HttpRequest.php 的文件并添加以下内容。

class HttpRequest extends CHttpRequest
{
    public $noCsrfValidationRoutes=array();

    protected function normalizeRequest()
    {
            //attach event handlers for CSRFin the parent
        parent::normalizeRequest();
            //remove the event handler CSRF if this is a route we want skipped
        if($this->enableCsrfValidation)
        {
            $url=Yii::app()->getUrlManager()->parseUrl($this);
            foreach($this->noCsrfValidationRoutes as $route)
            {
                if(strpos($url,$route)===0)
                    Yii::app()->detachEventHandler('onBeginRequest',array($this,'validateCsrfToken'));
            }
        }
    }
}

然后,使用以下信息编辑 protected/config 中的配置文件:

    // application components
'components'=>array(
    ....

    'request' => array(
        'enableCsrfValidation' => true,
        'class'=>'HttpRequest',
        'noCsrfValidationRoutes'=>array(
            'controllername/actionname',
        ),
    ),
 )

关于php - Yii CSRF 禁用操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16807735/

相关文章:

php - 在 mySQL 数据库中存储图像的问题

php - 为什么在 PHP 中执行 bool 测试后会发生变量赋值?

php - 如何让 json_encode() 与 ISO-8859-1 一起工作 (åäö)

facebook - Yii Facebook 注册

php - 如何更改 yii 框架的核心功能?

python - Django - 403 Forbidden CSRF 验证失败

php - 将两个不同的表相加并减去其总数

php - 在 yii 1.1 中输出全部 'findbyattributes'

cors - 可以将通配符 CORS 与 csrf token 一起使用吗?

javascript - 由于 csrf 保护,codeigniter 3 403(禁止)中的 XMLHttpRequest() POST 调用