【发布时间】:2014-12-15 01:37:25
【问题描述】:
错误:
无法验证您的数据提交错误
在 Yii2 中创建一个公共函数。但是,在这种方法中提交数据不接受, 请参阅以下错误图像。为什么会这样?
【问题讨论】:
-
无法验证 csrf 令牌
-
请分享有关该问题的更多详细信息。是否有任何内容写入您的应用程序的日志?
标签: yii2
无法验证您的数据提交错误
在 Yii2 中创建一个公共函数。但是,在这种方法中提交数据不接受, 请参阅以下错误图像。为什么会这样?
【问题讨论】:
标签: yii2
将此添加到您的控制器中:
public $enableCsrfValidation = false;
【讨论】:
使用 CSRF 令牌检查表单中是否存在隐藏输入。它应该看起来像
<input type="hidden" name="_csrf" value="ZEZ6Y0xrY3ARGS42fTwhMQgkDgF6BCEGEx4SMXQMBR4CPy0iPCIwNQ==">
【讨论】:
在布局的头部添加这个:<?= Html::csrfMetaTags() ?>
【讨论】:
$http.put() 并且在我的控制器中我有 public $enableCsrfValidation = false; ,这可行但听起来不太好。
如果您手动创建表单(即不使用 yii 表单方法),您应该添加这样的输入字段:
<input type="hidden" name="_csrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
来源:http://zero-exception.blogspot.com/2015/01/yii2-using-csrf-token.html
【讨论】:
_frontendCsrf,components->request-> 'csrfParam' => '_frontendCsrf',
由于 post_max_size、upload_max_filesize、max_input_time 有时您可能会在使用 Yii 2.0 时遇到此错误,也可能网络服务器可以修剪帖子,因此请在 nginx - client_max_body_size 上进行验证> 或在 apache - LimitRequestBody
【讨论】:
这个问题有多种解决方案,我想首先理解它为什么会发生有助于解决问题。
如果 CSRF 不是问题,
如果您运行的是 linux,请检查 php.ini 文件中的以下输入:
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; http://php.net/post-max-size
post_max_size = 8M
; Whether to allow HTTP file uploads.
; http://php.net/file-uploads
file_uploads = On
; Maximum allowed size for uploaded files.
; http://php.net/upload-max-filesize
upload_max_filesize = 2M
根据您的计算,调整上述 php.ini 参数以满足您的需求,然后进行测试。 我遇到了类似的问题,我解决了。
【讨论】:
【讨论】:
$.ajaxSetup({}); 在标头中设置 CSRF 吗?
要在整个应用程序中永久禁用 csrf 验证,请在您的配置中添加以下代码。
$config = [
'components' => [
'request' => [
'enableCsrfValidation' => false,
],
],
];
【讨论】:
$csrf = \yii::$app->request->csrfParam;
$token = \yii::$app->request->csrfToken;
//start from
echo Html::hiddenInput($csrf,$token);
//end from
【讨论】:
由于 Yii2 层使用而不是
_csrf变量_frontendCsrf。
<input type="hidden" name="_frontendCsrf" value="<?=Yii::$app->request->getCsrfToken()?>" />
这是第二次这个问题对我没有帮助,即使我之前发表了评论,所以我必须发表回复。
【讨论】:
从 yii 2.0.12 更新到 2.0.30
有这个错误的请求错误 400
Html::csrfMetaTags()。 我通过将以下代码添加到backend/config/main.php 解决了这个问题。
'components' => [
'request' => [
'csrfParam' => '_backend_csrf',
],
这是正确的方法还是会导致安全问题?
【讨论】:
仅对特定操作禁用
/**
* @inheritdoc
*/
public function beforeAction($action)
{
if ($action->id == 'my-action') {
$this->enableCsrfValidation = false;
}
return parent::beforeAction($action);
}
【讨论】: