当前位置: 首页 > 知识库问答 >
问题:

Zend框架2 CSRF保护

戚同
2023-03-14

目前我尝试使用Zend Framework 2的CSRF保护。

但每次我发送表单时,都会收到以下错误消息:

提交的表格不是来自预期的网站

我以这种方式实施了CSRF保护:

1)创建了一个Form Class并添加了csrf:

$this->add(array(
    'type' => 'Zend\Form\Element\Csrf',
    'name' => 'secret',
    'options' => array(
        'csrf_options' => array(
            'timeout' => 600
        )
    )
));

2)在view文件中呼应csrf元素

 echo $this->form()->openTag($forgotPasswordForm);
 echo $this->formRow($forgotPasswordForm->get('email'));
 echo $this->formRow($forgotPasswordForm->get('secret'));
 echo $this->formSubmit($forgotPasswordForm->get('submit'));
 echo $this->form()->closeTag($forgotPasswordForm);

我发现csrf令牌没有存储在会话中,但是为什么呢?

共有3个答案

宋宏儒
2023-03-14

我只是在表单中使用csrf/元素,在输入验证器中使用csrf/验证器。csrf/验证器必须使用与元素相同的名称构造

曹镜
2023-03-14

您可以在控制器中实例化表单,或者用DI注入,但是$form-

我使用这个备忘单,它是我为ZF2找到的最好的备忘单,它几乎包含了原则2的内容。http://zf2cheatsheet.com/#controller

这是我用的代码

<?php
// module/Album/src/Album/Form/AlbumForm.php:
namespace Album\Form;

use Zend\Form\Form;
use Zend\Form\Element;

class AlbumForm extends Form
{

    public function __construct($name = null)
    {

        parent::__construct('album');
        $this->add(array(
            'name' => 'id',
            'type' => 'Hidden',
        ));
        /* not including other elements for short answer*/
        **$this->add(new Element\Csrf('security'));**

        $this->add(array(
            'name' => 'submit',
        'type' => 'Submit',
        'attributes' => array(
            'value' => 'Go',
            'id' => 'submitbutton',
            ),
        ));
    }

}

<?php
// module/Album/view/album/album/add.phtml:
$form->setAttribute('action', $this->url('album', array(
        'action' => 'add' )));
**$form->prepare();**

echo $this->form()->openTag($form);
echo $this->formHidden($form->get('id'));
echo $this->formRow($form->get('title'));
echo $this->formRow($form->get('artist'));
**echo $this->formHidden($form->get('security'));**
echo $this->formSubmit($form->get('submit'));
echo $this->form()->closeTag();
靳越
2023-03-14

我的控制器中有一行:

$forgotPasswordForm = new ForgotPassword();
$forgotPasswordForm->prepare();

我移动了$forgotPasswordForm-

谢谢你的支持!

 类似资料:
  • 在Zf3项目中,我添加了条令和迁移模块,并配置了条令和迁移配置。 现在我通过以下命令创建迁移 有人帮我吗有什么问题吗?

  • 您好,我遵循了Zend framework 3的入门教程,并设法使其正常工作。因此,我决定下载一个新的框架应用程序,并像在线商店一样对其进行调整。但是当我去运行模块时。php文件通过wamp我收到以下错误消息: 致命错误:在C:\wamp64\www\shop\module\shop\src\module中找不到接口“Zend\ModuleManager\Feature\ConfigProvide

  • 问题内容: 有没有一种方法可以在Zend Framework中将SQL字符串作为查询执行? 我有一个像这样的字符串: 现在,我想直接执行此字符串,然后对其进行解析并“手动” 创建一个对象。或者,如果可能的话,从此字符串创建一个对象,以执行该对象。 我怎样才能做到这一点?我在Zend文档中找不到解决方案。 问题答案: 如果要在一开始创建Zend_DB对象,则可以使用该对象创建查询。请查看手册中的以下

  • 问题内容: 我遇到了一个可能非常简单的问题,在《 Zend Framework手册》或其他地方找不到令人满意的(主观上可以看到的)答案… 我有很多方法可以将php变量移交给我的sql查询,以致于我失去了概述,并且可能我对一般的引用缺乏一些了解。 准备的陈述 我知道,使用此解决方案,我不需要引用任何内容,因为数据库会为我处理此问题。 通过API查询Zend_Db_Table和_Row对象 $ use

  • 我目前正在阅读“带有Zend框架的简易PHP网站”。在某种程度上,它引入了原则,并给出了一个src代码以及一个关于如何正确安装东西的文本。我正确地遵循了所有步骤,但在其中一个步骤中,您必须使用“seed.php”,它读取一些ASIN并将一些amazon产品详细信息加载到数据库中。但是,执行脚本会给我带来错误,而且它似乎找不到文件。 PHP警告:include_once(WJG\Controller

  • 我在我们的项目中使用了两个mysql数据库。一个数据库连接基本用户信息,另一个数据库用于存储日常活动。现在需要合并两个数据库表。 获取包含用户信息的用户日常活动,然后需要加入主数据库。 我在PHP中找到了解决方案。但是我想要zend框架1.12上的解决方案? 我使用multidb功能来获取不同的操作。 但我想查询不同数据库中的联接2个表。 实例 从db1.table1.someid=db2.tab