【问题标题】:Cakephp 2 Security component and ajax callsCakephp 2 安全组件和 ajax 调用
【发布时间】:2012-08-08 07:28:08
【问题描述】:

在我的 ajax 调用中处理安全组件没有按应有的方式进行。

在 cakephp 2.x 中你如何处理它?

Appcontroller.php

public function beforeFilter() {
        $this->Security->blackHoleCallback = 'blackhole';
        if ($this->request->is('ajax')) {
            $this->Security->validatePost = false;
        }

好像没用……

【问题讨论】:

    标签: security jquery cakephp-2.1


    【解决方案1】:

    您仍然可以使用 Cake 提供的表单安全机制进行安全的 ajax 调用。 为此,请呈现一个不可见的表单并放置输入以存储 ajax 调用参数。然后,使用 Javascript 在您的表单中设置这些参数并通过序列化来执行 ajax 调用。请记住,如果您启用了 CSRF 检查(并且禁用了每个会话一个令牌),您将必须使用新的有效 CSRF 令牌更新表单(您可以使用 $this->request->params['_Token']['key'] 在控制器中读取它)。

    例子:

    <?php
        echo $this->Form->create('AjaxForm');
            echo $this->Form->hidden('value');
        echo $this->Form->end();
    ?>
    
    <script>    
        function makeAjaxCall()  {
            $.post(
                ajaxUrl,
                $('#AjaxForm').serialize(),
                function(data) {
                    $('#AjaxForm [name="data[_Token][key]"]').val(data.newCsrfToken)
                }
            );
        };
    </script>
    

    为了进一步参考,我们创建了一个组件,该组件允许在动态修改的客户端表单上保持启用的安全性,并且在进行 ajax 调用时无需解锁字段或操作。你可以在https://github.com/QTSdev/DynamicSecurity找到它。

    【讨论】:

    • 组件(和 Github 页面)已经消失。有新链接吗?
    猜你喜欢
    • 1970-01-01
    • 2012-08-05
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    相关资源
    最近更新 更多