5

私の ajax 呼び出しのセキュリティ コンポーネントの処理が正常に行われません。

Cakephp 2.x でどのように処理しますか?

Appcontroller.php

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

うまくいかないようです...

4

1 に答える 1

3

Cake が提供するフォーム セキュリティ メカニズムを使用して、安全な ajax 呼び出しを行うことができます。これを行うには、非表示のフォームをレンダリングし、入力を配置して ajax 呼び出しパラメーターを格納します。次に、Javascript を使用してこれらのパラメーターをフォームに設定し、シリアル化して ajax 呼び出しを行います。CSRF チェックを有効にしている (そしてセッションごとに 1 つのトークンを無効にしている) 場合は、フォームを新しい有効な 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で見つけることができます。

于 2014-03-24T04:01:02.077 に答える