2011-12-05 20 views
0

私は現在、リクエストパラメータに基づいてデータベースに挿入されるajax経由でデータをサーバーに送信するjqueryコードを開発しています。JQuery AJAXで一般的なCSRFトークンを実装する方法は?

しかし、私はむしろ、これがむしろ安全ではないCSRF攻撃によって悪用される可能性があることを心配しています。私はこれを研究しようとしましたが、PHPで使用する汎用実装の後でしかない、ジャンゴやレールなどの特定のフレームワークに対する答えを見つけるだけです。

JQuery.ajaxsend()関数を使用してコードを実装し、トークンがEVERY AJAXリクエストで送信されるように読んだことがありますが、JavaScriptが実装されているため、JavaScriptにはアクセスできませんPHPセッション変数。クッキーの使用は十分に安全でしょうか?

基本的には、リクエストの発信元を確認して、リクエストが本物であり、システムを利用するために使用された偽造リクエストでないことを確認する必要があります。

誰かが正しい方向に私を指し示すことができるなら、それは最も高く評価されるでしょう!

答えて

1

まあ、$.ajaxは、そのリクエストでPHPセッションクッキーを含むクッキーを送信しているようです。この機能を使用すると、CSRFからセッションハイジャックへの攻撃が変更されますが、これが始まりです。次に、セッションハイジャックを回避できる場合は、SSLを介してサービスを実行します。

私は確かにこれを行う他の方法がありますが、バニラPHPの場合、これは動作するようです。私が間違っているなら、誰かが私を修正してください。

+0

これは、AJAXリクエストがセッションで何かによって認証されていることを前提としています。 –

+0

ユーザーがアクセスできるように、ユーザーはログインする必要があります。したがって、認証のためにPHPセッションでチェックが行われます。 –

+0

また、$ .ajaxで送信されるセッションクッキー情報がないようです。 –

1

は、ここでは、Djangoの中で行うの方法ですが、(「csrftoken」としてクッキーにCSRFトークンを設定する以外に)フレームワークの特定だ何もない:https://docs.djangoproject.com/en/1.3/ref/contrib/csrf/#ajax

+0

私はトークンを生成し、PHPを使用してログイン時にクッキーに追加することができると思いますか?サンプルコードにトークンを生成する機能がないためです。 –

+0

Djangoはミドルウェアを使用して、すべてのページビューのCookieにCSRFトークンを追加します(まだ存在していない場合)。前記ミドルウェアはまた、CSRFトークンがそこに存在し、かつ正しい(POSTパラメータまたはX-CSRFTokenヘッダ内にある)ことを検証するために、あらゆるフォーム・ポストをチェックする。 –