2012-08-08 12 views
5

私のajaxコールのセキュリティコンポーネントを扱うのは、そうしないといけません。Cakephp 2セキュリティコンポーネントとajaxコール

cakephp 2.xではどうやって対処していますか? Appcontroller.phpが

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

動作するようには思えない

...

答えて

3

あなたはまだケーキの提供フォームのセキュリティの仕組みを利用して、安全なAjaxの呼び出しを行うことができます。 これを行うには、非表示のフォームをレンダリングし、ajax呼び出しパラメータを格納するために入力を配置します。次に、Javascriptを使用してこれらのパラメータをフォームに設定し、それをシリアル化してajaxコールを行います。 CSRFチェックを有効にして(セッションごとに1トークンを無効にする)、新しい有効なCSRFトークンを使用してフォームを更新する必要があることを覚えておいてください(コントローラーで$this->request->params['_Token']['key']と読むことができます)。

例:さらに参考のために、我々はdinamically変更されたクライアント側のフォーム上で有効なセキュリティを維持することを可能にするコンポーネントを作成し、フィールドやアクションAJAXを作るロックを解除する必要がなくなりいる

<?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> 

コール。それはhttps://github.com/QTSdev/DynamicSecurityで見つけることができます。

+0

コンポーネント(およびGithubページ)が消滅しました。新しいリンクがありますか? – schnauss

関連する問題