2011-01-22 21 views
8

ajaxで送信されたフォームに問題があります。私はZend Frameworkでフォームを作成します。いくつかは実際のフォームなので、ハッシュ要素を追加します。他は小規模な操作(ここではupvoteとdownvoteのようなもの)のため、私はリンクでそれらを行います。ajaxのCSRFトークン

私の問題は、特に小さなフォーム(リンク)にajaxを使用する必要があることです。私は多くの疑問を見ていますが、問題を解決するのに十分なものはありません。フォームがajaxを介して送信されたときにcsrfトークンがスムーズに動作するようにする方法の詳細な説明はありますか?好ましくはZend Frameworkを使用しますが、一般的なPHPの回答も役に立ちます。

答えて

7

CSRFトークンは必要ありません。あなたはHTTP_X_REQUESTED_WITHメソッドを使用します(例:hereを参照)。

+0

。私はこの質問のREQUESTED_WITHヘッダーについて読むhttp://stackoverflow.com/questions/3664044/anti-csrf-token-an d-javascript/3665136#3665136しかし、Rookのコメント(とその回答自体)は本当に安全ではないと言います。だから私がそれを使うなら、私はまだそれに "何か"を加える必要があると思う。あなたの意見は何ですか? – samquo

+0

@samquo haha​​私は私の名前がSOのセキュリティの上にたくさん出てくるのが好きです。しかし、XHRの原産地規則が同じであるため、x_requested_withexploitableをチェックするとその真実です。 – rook

+2

ところで、あなたはREQUESTED_WITHを信じるだけでなく、RailsとDjangoの両方が最近更新され、十分な保護ができない場合を考慮に入れています。ここではDjangoのアップデートに関する注釈があります:http://is.gd/JLBrfL 私はZendでそれを達成する方法がわかりません:)私はCSRFとAJAXを探している間にこれを見つけました。 – Rob

0

このページに来る人には、ajaxでcsrfを使用することができます。あなたは、アクションの終了前にこの権利を追加することを経由して使用してハッシュを再生成する必要がありますコントローラで

ます$ form->ハッシュ・> initCsrfToken();

$ this-> view-> csrfhash = $ form-> hash-> getValue(); JSで

あなたはAJAXを行うために使用しているファイルを、あなたはそれが作成されると、ハッシュのインスタンスを見つけるために、セレクタを使用する必要があるとしている(そうjqueryのため:

$(#ハッシュ).replaceWith(csrfhash);あなたはreplaceWithを使用する場合 は実際にあなたがIDと名前を含む全体の隠されたCSRFの要素を交換するつもりだ。しかし、その部分が行うのはかなり簡単なはず

関連する問題