2017-08-30 1 views
0

にCSRFトークンを生成します。そこで私はいくつかのチュートリアルやデモプロジェクトを見てきました。これは、最も興味深いものだった:https://github.com/alexdebril/slim-angular私はCSRFの実装に問題があるのボックスのうちPHPスリムフレームワークでは、現在、私はfronendなどのバックエンドとangularJSなどスリムでウェブサイトを構築しようとしている各接続

。このプロジェクトでは、すべての接続に適用するために、CSRF保護がミドルウェアに実装されています。良いかどうかは無関係です。
コンポーザーとnpmにすべての依存関係をインストールすると、すべてのサーバー接続がPHPセッションに格納される新しいCSRFトークンを取得するため、プロジェクトは正常に動作しません。

だから、このプロジェクトのメインページで、サーバーへのCSRFトークンで固定文字列を送信します、角の形があります。その後、サーバーは同じ文字列で応答し、角度コントローラはそれを出力します。最初にフォームを送信すると、すべて正常に動作しますが、2回目の送信では、サーバーにはエラーが400で返されます。角度がまだない新しいcsrfトークンがあるためです。

しかし、この例のプロジェクトの作成者は、彼は、このようなエラーを可能性がなされていませんでしたか?なぜ私のapacheは、同じユーザーとの各接続に対して新しいcsrfトークンを作成しますか?どうすればこの問題を解決できますか?

私の依存関係:
スリム\スリムv3.8.1
スリム\のCSRFのv0.7.0
角度v1.6.4(ルート、アリア、材料、UI-ブートストラップ、クッキー、HTTP-AUTH-インターセプター)

どのようにして各ユーザーに1つのCSRFトークンを持たせることができますか?
最新のCSRFトークンを常に使用するために、どのようにトークン化サービスを更新する必要がありますか?それともウォッチャーが必要ですか?これを検出するには?

+0

slim-angularのドキュメントでは、各リクエストをトークン化する方法について説明しています。 [slim-angular Tokenizerの例](https://github.com/alexdebril/slim-angular#tokenizer)を参照してください。 – georgeawg

答えて

0

角度に加えて、これにはいくつかの問題があるので、私はスリム自身のCSRFパッケージ(スリム/ CSRF)を削除しました。
代わりに、ヘッダーで送信されるXSRFトークンを使用します。角度はこれをうまく処理して、箱から完全に取り出します。

2

幸いなことに、すべての要求にCSRFトークンを再生無効にする設定を持っている、彼らはslim-csrfを使用していると思われます。 GitHub readmeによると:デフォルトでは

Slim\Csrf\Guardは、各要求の後に、新鮮な名前/値のペアを生成します。これは、certain situationsの重要なセキュリティ手段です。しかし、多くの場合、これは不要で、a single token throughout the user's session will sufficeです。セッションごとのリクエストを使用することで、各リクエスト後に新しいCSRFトークンを取得することなく(ページをリロードするか、別のリクエストを行うことによって)AJAXリクエストを処理するなど、簡単になります。

ので、/php/middleware.phpで、ちょうどtrueに第六パラメータを設定し、nullとして、残りを残します。他の5つのオプションのリストについては、sourceをご覧ください。

+0

私はすでにこれを試しました。しかし、 '$ name = $ request-> getAttribute($ container-> csrf-> getTokenNameKey() CSRFキー(「ヌル」のみ)。また、サーバーが間違った接続のために新しいトークンを生成する場合、角度がそれを検出しないという問題もあります。したがって、主な質問は次のようなものです。CSRFトークンの変化を検出するにはどうしたらよいですか? (各接続に新しいトークンが存在するかどうか、または攻撃や誤った認証に新しいトークンのみがあるかどうかは関係ありません)。 – christopher2007

関連する問題