禁用 Yii2 中单个操作的 CSRF 验证
Disable CSRF validation for individual actions in Yii2
有没有办法为控制器的某些操作禁用 CSRF 验证,同时为其他操作保持启用状态?
在我的例子中,我有几个可配置的操作 类,旨在注入控制器。我无法将 csrf 验证令牌传递到 AJAX 请求中,因为我正在使用的东西是前端的外部(不是我制作的)WYSIWYG 插件。是的,我仍然可以使用这些操作禁用整个控制器的 csrf 验证,但它可能不安全。
对于特定的控制器/操作,您可以像这样禁用 CSRF 验证:
use Yii;
...
Yii::$app->controller->enableCsrfValidation = false;
或者在控制器内部:
$this->enableCsrfValidation = false;
看看$enableCsrfValidation property of yii\web\Controller。
更新:
这是一些规范。
如果您想为单个操作禁用 CSRF 验证,您需要在 beforeAction
事件处理程序中执行此操作,因为在操作运行之前会检查 CSRF 令牌(在 beforeAction
中 [=15] =]).
/**
* @inheritdoc
*/
public function beforeAction($action)
{
if ($action->id == 'my-method') {
$this->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
官方文档:
将其放入您的控制器中,只需将索引替换为您想要禁用的任何操作即可 csrf
。
public function beforeAction()
{
if ($this->action->id == 'index') {
$this->enableCsrfValidation = false;
}
return true;
}
对我来说这是有效的
public function beforeAction($action) {
if($action->id == 'my-action') {
Yii::$app->request->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
我已经试过了,效果很好。
转到具体的控制器,把这个写在最上面。
public $enableCsrfValidation = false;
有没有办法为控制器的某些操作禁用 CSRF 验证,同时为其他操作保持启用状态?
在我的例子中,我有几个可配置的操作 类,旨在注入控制器。我无法将 csrf 验证令牌传递到 AJAX 请求中,因为我正在使用的东西是前端的外部(不是我制作的)WYSIWYG 插件。是的,我仍然可以使用这些操作禁用整个控制器的 csrf 验证,但它可能不安全。
对于特定的控制器/操作,您可以像这样禁用 CSRF 验证:
use Yii;
...
Yii::$app->controller->enableCsrfValidation = false;
或者在控制器内部:
$this->enableCsrfValidation = false;
看看$enableCsrfValidation property of yii\web\Controller。
更新:
这是一些规范。
如果您想为单个操作禁用 CSRF 验证,您需要在 beforeAction
事件处理程序中执行此操作,因为在操作运行之前会检查 CSRF 令牌(在 beforeAction
中 [=15] =]).
/**
* @inheritdoc
*/
public function beforeAction($action)
{
if ($action->id == 'my-method') {
$this->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
官方文档:
将其放入您的控制器中,只需将索引替换为您想要禁用的任何操作即可 csrf
。
public function beforeAction()
{
if ($this->action->id == 'index') {
$this->enableCsrfValidation = false;
}
return true;
}
对我来说这是有效的
public function beforeAction($action) {
if($action->id == 'my-action') {
Yii::$app->request->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
我已经试过了,效果很好。
转到具体的控制器,把这个写在最上面。
public $enableCsrfValidation = false;