加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

在特定操作CakePHP 3上禁用CSRF

发布时间:2020-12-13 21:54:09 所属栏目:PHP教程 来源:网络整理
导读:所以,我有一个使用 DataTables自动生成的表.我的CakePHP中的一个动作抓取该表的数据,并将其格式化为JSON以供数据表使用,这是格式化的JSON: ?php$data = array();if (!empty($results)) { foreach ($results as $result) { $data[] = [ 'name' = $result-nam
所以,我有一个使用 DataTables自动生成的表.我的CakePHP中的一个动作抓取该表的数据,并将其格式化为JSON以供数据表使用,这是格式化的JSON:

<?php
$data = array();
if (!empty($results)) {
    foreach ($results as $result) {
        $data[] = [
          'name' => $result->name,'cad' => $this->Number->currency($result->CAD,'USD'),'usd' => $this->Number->currency($result->USD,'edit' => '<a href="' .
            $this->Url->build(['controller' => 'Portfolios','action' => 'edit',$result->id]) .
    '"><i class="fa fa-pencil"></i></a>','delete' => '<input type="checkbox" class="delete" value="' . $result->id . '">'
        ];
    }
}

echo json_encode(compact('data'));

正如您所看到的,我在其中有一个“删除”选项,它输出一个带有相应元素的id值的复选框.选中该复选框后,将显示一个删除按钮,该按钮发送此ajax请求:

$('a#delete').on('click',function(e) {
    e.preventDefault();
    var checkedValues = [];
    $('input.delete:checked').each(function() {
        checkedValues.push($(this).val());
    });
    $.ajax({
        url: $(this).attr('href'),type: 'POST',data: checkedValues
    });
})

这个ajax帖子转到我的控制器动作delete().我遇到的问题是我收到一条错误,指出“无效的Csrf令牌”.我知道为什么会这样,我正在提交一个带有Csrf保护的表单,它没有添加Csrf标记.

我无法弄清楚如何为这种情况手动创建Csrf令牌(在页面加载后生成输入值).我也无法弄清楚如何禁用Csrf保护.我读了this,但代码放在了beforeFilter函数中,据我所知,这意味着它运行在每个动作上,而不仅仅是这个动作,而这不是我想要的.另外,说实话,我更倾向于一个不停用安全功能的解决方案.

反正有没有为这个特定的操作禁用Csrf,还是有更好的方法来做到这一点?

解决方法

在这里阅读有关CSRF组件的所有内容

http://book.cakephp.org/3.0/en/controllers/components/csrf.html

您可以在此处禁用特定操作:

http://book.cakephp.org/3.0/en/controllers/components/csrf.html#disabling-the-csrf-component-for-specific-actions

public function beforeFilter(Event $event) {
     if (in_array($this->request->action,['actions_you want to disable'])) {
         $this->eventManager()->off($this->Csrf);
     }
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读