Cakephp 2安全组件和ajax调用

5

处理我的ajax调用安全组件时出现了问题。

在cakephp 2.x中,你如何处理这个问题?

Appcontroller.php

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

似乎不起作用...

1个回答

3
您可以使用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页面)已经消失了。你有新的链接吗? - caitlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接