【问题标题】:Security issues when sending POST request wih CakePHP使用 CakePHP 发送 POST 请求时的安全问题
【发布时间】:2013-08-23 19:56:05
【问题描述】:

我的视图使用 jQuery 将 POST 数据发送到我的控制器,但它失败了,我收到以下错误:

The request has been black-holed 
The requested address'/settings/submit_bank_info' was not found on this server.

我可以让它工作的唯一方法是一起删除该控制器中的安全性。

这是相关控制器的前置过滤器

 public function beforeFilter() {
    parent::beforeFilter();
    $this->Auth->allow('help','submit_bank_info');
    $this->Auth->authorize = 'Controller';
}

如果在 cake 的文档中看到这个

使用安全组件时,您必须使用 FormHelper 创建您的表格。此外,您不得覆盖任何 字段的“名称”属性。安全组件寻找某些 由 FormHelper 创建和管理的指标(尤其是 在 create() 和 end() 中创建的那些。动态改变字段 在 POST 请求中提交(例如禁用、删除或 通过 JavaScript 创建新字段)可能会触发 请求的黑洞。查看 $validatePost 或 $disabledFields 配置参数。

我使用的是 2.3.8 版本。有什么方法可以让我为该操作禁用它,以便我可以为其他操作保留安全组件?

【问题讨论】:

  • /settings/help 或 /help 有效吗?
  • 是的,但这些不是基于 javascript/jquery 的表单。它们是使用表单助手构建的。出于几个原因,我不得不将 javascript/jquery 用于“submit_bank_info”。我正在使用平衡支付卡处理。

标签: php jquery ajax cakephp


【解决方案1】:

尝试停止 jQuery 并发布表单并使用 firebug 跟踪 CakePHP 与表单一起发送的隐藏数据,因为他们的文档发送隐藏数据以防止 CSRF 攻击。

csrfExpires 属性可以是任何兼容的值 strtotime()。默认情况下,FormHelper 将添加一个 data[_Token][key] 启用组件时,每个表单都包含 CSRF 令牌。

尝试捕获隐藏字段并将其与您的 jquery 请求一起发送。

更新

也尝试使用 CakePHP 生成表单,它将生成 data[_Token][fields] 和 data[_Token][unlocked] 隐藏字段及其键:

<?php 
    echo $this->Form->create('formA',array('id'=>'formA'));
    echo $this->Form->input('inputA');
    echo $this->Form->submit();
    echo $this->Form->end();
?> 

这会生成

    <input type="hidden" name="_method" value="POST"/>
    <input type="hidden" name="data[_Token][key]" value="randomValue"/>
    <input type="hidden" name="data[_Token][fields]" value="randomValue"/>
    <input type="hidden" name="data[_Token][unlocked]" value=""/>

在你的 JQuery ajax 请求serialize() 中发送表单。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多