Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在CodeIgniter中的链接而非表单中添加和验证令牌(针对CSRF等)?_Php_Codeigniter - Fatal编程技术网

Php 如何在CodeIgniter中的链接而非表单中添加和验证令牌(针对CSRF等)?

Php 如何在CodeIgniter中的链接而非表单中添加和验证令牌(针对CSRF等)?,php,codeigniter,Php,Codeigniter,我知道如何在CodeIgniter的表单中启用CSRF,但我不确定如何在CodeIgniter经典链接中实现此功能(例如,在管理区域中添加/删除私人消息、帖子等) 现在我用的是这样的东西: 查看 <?php echo anchor('account/delete_private_message/'.$obj->pmID, 'delete mesage', array('onclick' => 'return confirm(\'Do you really want to del

我知道如何在CodeIgniter的表单中启用CSRF,但我不确定如何在CodeIgniter经典链接中实现此功能(例如,在管理区域中添加/删除私人消息、帖子等)

现在我用的是这样的东西:

查看

<?php echo anchor('account/delete_private_message/'.$obj->pmID, 'delete mesage', array('onclick' => 'return confirm(\'Do you really want to delete this private message?\');', 'class' => 'delete-message-button')); ?>
型号

function delete_pm($pmID)
    {

        $return = 0;
        if(!empty($pmID))
        {
            $this->db->where('pmID', $pmID);
            $result = $this->db->delete('private_messages');
        }
        return $result;
    }
如果用户在弹出窗口中单击OK,则消息将被删除

问题是如何将令牌添加到链接和用户会话,并验证它,等等。我不知道如何实现这一点才能正常工作

编辑:我想我必须在链接末尾添加生成的令牌,如:

帐户/删除私人消息/1239/dfdf6e7re67a6e87r6e87r69876bn3


值dfdf6e7re67a6e87r6e87r69876bn3也在当前用户的会话中,并在控制器中验证它们。然而,我不知道我到底应该做什么。因此,非常感谢您的帮助。

您是对的-只需将CSRF令牌作为链接的一部分传递即可。下面的例子应该有帮助(但我还没有测试过)

p.s.您的型号代码有错误

$return = 0;
应该是

$result = 0;

我会试试看,让你知道的嗯,你能用代码让我停顿一下吗;)。我不是全局使用csrf,我需要在视图中设置cookie和令牌,并手动获取cookie和令牌。我正在使用设置令牌的链接,它的工作。但我无法将此值保存在名为csrf_cookie_name的cookie中的cookie中。但在视图中,set_cookie对我不起作用;(.你能帮我在我的视图中添加什么吗?提前谢谢。我在我的页面上使用了很多ajax表单(没有删除内容),这会产生问题。是否可以在之后设置cookie?如果可以,如何设置?例如,此代码不起作用:$csrf\u cookie\u value=$this->security->get\u csrf\u hash();$this->input->set\u cookie($csrf\u cookie name',$csrf\u cookie\u value);echo$this->input->cookie('csrf_cookie_name');没有任何内容被回显。用户登录时,您可以完全不同的方法生成一个随机字符串并将其存储在会话中。然后使用此字符串进行比较。它与csrf令牌“相同”,但您正在创建自己的,而不是使用CI令牌
$return = 0;
$result = 0;