タグ付けされた質問 「csrf」

クロスサイトリクエストフォージェリは、ユーザーのブラウザでWebサイトの信頼を悪用する悪意のある攻撃です。


4
CSRF防止トークンをCookieに入れるのはなぜ一般的ですか?
CSRFの問題全体とそれを防ぐための適切な方法を理解しようとしています。(私が読み、理解し、同意したリソース:OWASP CSRF防止に関するチートシート、CSRFに関する質問) 私が理解しているように、CSRFに関連する脆弱性は、(Webサーバーの観点から)着信HTTPリクエストの有効なセッションCookieが認証済みユーザーの希望を反映しているという仮定によって導入されています。ただし、オリジンドメインのすべてのCookieはブラウザーによってリクエストに魔法のようにアタッチされているため、実際のサーバーは、リクエスト内の有効なセッションCookieの存在から、認証されたセッションを持つブラウザーからのリクエストであると推測できます。それはコードについて何も仮定することはできませんそのブラウザで実行している、またはそれが本当にユーザーの希望を反映しているかどうか。これを防ぐ方法は、リクエストに追加の認証情報(「CSRFトークン」)を含めることです。これは、ブラウザの自動Cookie処理以外の方法で行われます。大まかに言えば、セッションCookieはユーザー/ブラウザーを認証し、CSRFトークンはブラウザーで実行されているコードを認証します。 つまり、簡単に言うと、セッションCookieを使用してWebアプリケーションのユーザーを認証している場合は、各応答にCSRFトークンを追加し、各(変更)リクエストで一致するCSRFトークンを要求する必要があります。次に、CSRFトークンはサーバーからブラウザーへとサーバーからサーバーへの往復を行い、要求を行っているページがそのサーバーによって承認されている(生成されている)ことをサーバーに証明します。 私の質問に戻ります。これは、その往復でそのCSRFトークンに使用される特定の転送方法についてです。 (AngularJS、Django、Railsなどで)CSRFトークンをサーバーからクライアントにCookieとして(つまり、Set-Cookieヘッダーで)送信し、クライアントのJavascriptでCookieから削ってそれを添付するのが一般的ですサーバーに送り返す別のXSRF-TOKENヘッダーとして。 (別の方法は、たとえばExpressによって推奨される方法です。サーバーによって生成されたCSRFトークンは、サーバー側のテンプレート拡張を介して応答本文に含まれ、サーバーに戻すコード/マークアップに直接添付されます。非表示のフォーム入力として。この例は、よりWeb 1.0風の方法ですが、より一般的なJSの重いクライアントに一般化されます。 CSRFトークンのダウンストリームトランスポートとしてSet-Cookieを使用するのはなぜそれほど一般的ですか。なぜこれが良いアイデアなのでしょうか。これらすべてのフレームワークの作成者がオプションを慎重に検討し、これを間違えなかったと思います。しかし、一見したところ、基本的にCookieの設計上の制限を回避するためにCookieを使用することは、お粗末なようです。実際、ラウンドトリップトランスポートとしてCookie(サーバーの下流にSet-Cookie:ヘッダーがブラウザにCSRFトークンを通知し、ブラウザにそれをサーバーに返すようにCookie:ヘッダーを上流に送信する)を使用した場合、脆弱性が再導入されます。修正しようとしています。 上記のフレームワークは、CSRFトークンのラウンドトリップ全体でCookieを使用しないことに気づきました。彼らはSet-Cookieダウンストリームを使用し、次に他の何か(X-CSRF-Tokenヘッダーなど)をアップストリームに使用します。これにより、脆弱性が排除されます。ただし、ダウンストリームトランスポートとしてSet-Cookieを使用しても、誤解を招く可能性があり、危険です。これで、ブラウザはCSRFトークンをすべての要求に添付し、本物の悪意のあるXSRF要求を含みます。せいぜい要求が必要以上に大きくなり、最悪の場合でも意味のあるサーバーコードの一部が実際にそれを使用しようとする可能性があり、これは本当に悪いことです。さらに、CSRFトークンの実際の受信者はクライアント側のJavascriptであるため、このCookieをhttpのみで保護することはできません。
283 security  cookies  web  csrf  owasp 

17
警告:CSRFトークン認証レールを検証できません
AJAXを使用してビューからコントローラーにデータを送信していますが、次のエラーが発生しました。 警告:CSRFトークンの信頼性を確認できません このトークンをデータとともに送信する必要があると思います。 誰でもこれを行う方法を知っていますか? 編集:私の解決策 これを行うには、AJAXポストに次のコードを挿入します。 headers: { 'X-Transaction': 'POST Example', 'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content') },

20
jQuery Ajax呼び出しとHtml.AntiForgeryToken()
私は自分のアプリに、インターネット上のブログ投稿で読んだ情報に従って、CSRF攻撃の緩和策を実装しました。特にこれらの投稿は私の実装の原動力となっています ASP.NETおよびWebツール開発者コンテンツチームによるASP.NET MVCのベストプラクティス Phil Haackブログのクロスサイトリクエストフォージェリ攻撃の構造 ASP.NET MVCフレームワークのAntiForgeryToken- David HaydenブログのHtml.AntiForgeryTokenおよびValidateAntiForgeryToken属性 基本的に、これらの記事と推奨事項では、CSRF攻撃を防ぐには、次のコードを実装する必要があるとしています。 1)[ValidateAntiForgeryToken]POST Http動詞を受け入れるon onアクションを追加します [HttpPost] [ValidateAntiForgeryToken] public ActionResult SomeAction( SomeModel model ) { } 2)<%= Html.AntiForgeryToken() %>サーバーにデータを送信するフォーム内にヘルパーを追加します <div style="text-align:right; padding: 8px;"> <%= Html.AntiForgeryToken() %> <input type="submit" id="btnSave" value="Save" /> </div> とにかく、私のアプリの一部で、フォームをまったく持たずにサーバーに対してjQueryでAjax POSTを実行しています。これは、たとえば、ユーザーに画像をクリックして特定のアクションを実行させる場合に発生します。 アクティビティのリストを含むテーブルがあるとします。テーブルの列に「アクティビティに完了のマークを付ける」という画像があり、ユーザーがそのアクティビティをクリックすると、次のサンプルのようにAjax POSTを実行しています。 $("a.markAsDone").click(function (event) { event.preventDefault(); $.ajax({ type: "post", …

18
Django CSRFチェックがAjax POSTリクエストで失敗する
私のAJAX投稿を介して、DjangoのCSRF保護メカニズムに準拠するためにいくつかの助けを借りることができました。私はここの指示に従いました: http://docs.djangoproject.com/en/dev/ref/contrib/csrf/ そのページにあるAJAXサンプルコードを正確にコピーしました。 http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ajax 呼び出しのgetCookie('csrftoken')前の内容を印刷するアラートを配置し、xhr.setRequestHeader実際にいくつかのデータが入力されています。トークンが正しいことを確認する方法はわかりませんが、何かを見つけて送信することをお勧めします。 しかし、Djangoは私のAJAX投稿をまだ拒否しています。 これが私のJavaScriptです。 $.post("/memorize/", data, function (result) { if (result != "failure") { get_random_card(); } else { alert("Failed to save card data."); } }); Djangoからのエラーは次のとおりです。 [23 / Feb / 2011 22:08:29] "POST / memorize / HTTP / 1.1" 403 2332 私は何かが欠けていると確信しています、そしておそらくそれは単純ですが、それが何であるかわかりません。私はSOの周りを検索して、csrf_exemptデコレータを介して私のビューのCSRFチェックをオフにすることに関するいくつかの情報を見ましたが、それは魅力的ではありません。私はそれを試してみましたが機能しますが、可能であれば、Djangoがそれを期待するように設計された方法でPOSTを機能させたいと思います。 参考までに、私の見解の要点を以下に示します。 def myview(request): profile = …
180 python  ajax  django  csrf 

11
ajax post ASP.NET MVCに偽造防止トークンを含める
ajaxでAntiForgeryTokenに問題があります。私はASP.NET MVC 3を使用しています。jQueryAjax呼び出しとHtml.AntiForgeryToken()で解決策を試しました。そのソリューションを使用して、トークンが渡されます: var data = { ... } // with token, key is '__RequestVerificationToken' $.ajax({ type: "POST", data: data, datatype: "json", traditional: true, contentType: "application/json; charset=utf-8", url: myURL, success: function (response) { ... }, error: function (response) { ... } }); [ValidateAntiForgeryToken]データ(トークンを含む)がパラメーターとしてコントローラーに渡されているかどうかを確認するためだけに属性を削除すると、それらが渡されていることがわかります。しかし、何らかの理由でA required anti-forgery token was not supplied or …

4
ログインフォームにはCSRF攻撃に対するトークンが必要ですか?
これまでに学んだことから、トークンの目的は、攻撃者がフォームの送信を偽造するのを防ぐことです。 たとえば、Webサイトに追加アイテムをショッピングカートに入力するフォームがあり、攻撃者が不要なアイテムでショッピングカートをスパムする可能性があります。 ショッピングカートフォームには複数の有効な入力がある可能性があるため、これは理にかなっています。攻撃者が行う必要があるのは、Webサイトが販売しているアイテムを知っていることだけです。 この場合、トークンがどのように機能し、セキュリティが追加されるかを理解しています。これは、カートに追加された各アイテムのフォームの「送信」ボタンをユーザーが実際に入力して押したためです。 ただし、トークンはユーザーのログインフォームにセキュリティを追加しますか?これにはユーザー名とパスワードが必要ですか? ユーザー名とパスワードは非常に一意であるため、攻撃者はログインフォージェリが機能するために(トークンが設定されていなくても)両方を知っている必要があり、攻撃者がすでにそれを知っている場合は、Webサイトにサインオンするだけです彼自身。言うまでもなく、ユーザーを自分でログインさせるCSRF攻撃は、いずれにしても実用的な目的はありません。 CSRF攻撃とトークンに対する私の理解は正しいですか?そして、私が疑っているように、それらはユーザーログインフォームには役に立たないのですか?
161 php  token  csrf 

3
ブラウザでJWTを保存する場所は?CSRFから保護する方法は?
私はクッキーベースの認証を知っています。SSLおよびHttpOnlyフラグを適用して、Cookieベースの認証をMITMおよびXSSから保護できます。ただし、CSRFから保護するには、さらに特別な対策が必要になります。それらは少し複雑です。(参考) 最近、JSON Web Token(JWT)が認証のソリューションとして非常にホットであることを発見しました。JWTのエンコード、デコード、および検証について知っています。ただし、JWTを使用している場合に、一部のWebサイト/チュートリアルでCSRF保護が不要であると説明されている理由がわかりません。私はかなりたくさん読んで、以下の問題を要約しようとします。私は、誰かがJWTの全体像を提供し、JWTについて誤解している概念を明確にしてほしいと思っています。 JWTがCookieに格納されている場合、サーバーがCookie /トークンを検証するためのセッションを必要としないことを除いて、Cookieベースの認証と同じだと思います。特別な対策が講じられていない場合、CSRFには依然としてリスクがあります。JWTはCookieに保存されませんか? JWTがlocalStorage / sessionStorageに格納されている場合、Cookieがないため、CRSFから保護する必要はありません。問題は、JWTをサーバーに送信する方法です。ここで見つけたのは、jQueryを使用してajaxリクエストのHTTPヘッダーでJWTを送信することです。それで、ajaxリクエストだけが認証を行うことができますか? また、「Authorization header」と「Bearer」を使用してJWTを送信するブログショーがもう1つ見つかりました。私はブログが話している方法を理解していません。誰かが「Authorizationヘッダー」と「Bearer」についてもっと説明してもらえますか?これにより、JWTはすべてのリクエストのHTTPヘッダーによって送信されますか?はいの場合、CSRFはどうですか?

3
クロスドメインフォームのPOST
私はこのトピックに関する記事や投稿(SOを含む)をすべて見てきましたが、主流のコメントは、同一生成元ポリシーがドメイン間でフォームPOSTを防止するというものです。同じ起源のポリシーがフォームの投稿に適用されないことを誰かが示唆しているのを見た唯一の場所はここです。 もっと「公式」または正式な情報源からの回答を希望します。たとえば、同一生成元がフォームPOSTにどのように影響するか、または影響しないかを扱うRFCを誰かが知っていますか? 説明:GETまたはPOSTを構築して任意のドメインに送信できるかどうかは尋ねていません。私は尋ねています: Chrome、IE、またはFirefoxでドメイン「Y」のコンテンツがドメイン「X」にPOSTを送信できる場合 POSTを受信するサーバーが実際にフォームの値をまったく表示する場合。私がこれを言ったのは、オンラインディスカッションの大多数がテスターがサーバーが投稿を受け取ったと記録しているが、フォームの値はすべて空である/取り除かれているためです。 公式ドキュメント(RFCなど)は、(ブラウザが現在実装しているものに関係なく)予想される動作を説明しています。 ちなみに、同一生成元がフォームのPOSTに影響を与えない場合は、偽造防止トークンが必要な理由がいくらか明らかになります。攻撃者が単純にHTTP GETを発行して偽造防止トークンを含むフォームを取得し、同じトークンを含む不正なPOSTを作成する可能性があると信じるのは簡単すぎるため、「やや」と言います。コメント?

8
Rails CSRF Protection + Angular.js:protect_from_forgeryにより、POSTでログアウトする
protect_from_forgeryオプションがapplication_controllerで言及されている場合、ログインしてGETリクエストを実行できますが、最初のPOSTリクエストでRailsがセッションをリセットし、ログアウトします。 このprotect_from_forgeryオプションを一時的にオフにしましたが、Angular.jsで使用したいと思います。それを行う方法はありますか?

2
ステートレス(=セッションレス)認証を使用する場合、CSRFトークンは必要ですか?
アプリケーションがステートレス認証(HMACなどを使用)に依存している場合、CSRF保護を使用する必要がありますか? 例: シングルページアプリがあります(そうでない場合、各リンクにトークンを追加する必要があります:)<a href="...?token=xyz">...</a>。 ユーザーはを使用して自分自身を認証しPOST /authます。認証が成功すると、サーバーはトークンを返します。 トークンは、JavaScriptを介して、単一ページアプリ内の変数に格納されます。 このトークンは、などの制限されたURLへのアクセスに使用されます/admin。 トークンは常にHTTPヘッダー内で送信されます。 HttpセッションもCookieもありません。 私が理解している限り、ブラウザはトークンを保存しないため、クロスサイト攻撃を使用する可能性はありません(?!)。したがって、サーバーにトークンを自動的に送信することはできません(Cookies /セッション)。 何か不足していますか?

18
「ページは非アクティブのため期限切れになりました」-Laravel 5.5
私の登録ページは、フォームにCsrfToken({{ csrf_field() }})が存在する状態でフォームを適切に表示しています。 フォームHTML <form class="form-horizontal registration-form" novalidate method="POST" action="{{ route('register') }}"> {{ csrf_field() }} .... </form> ユーザーに組み込み認証を使用しています。ルートとリダイレクト以外は何も変更していません。 フォームを送信すると(リロード直後も)、非アクティブのためページが期限切れになったと表示されます。更新してもう一度お試しください。エラー。 私は非常に小さなことを逃しています。しかし、それが何かはわかりません。何か助けは? 更新 問題が見つかりました。セッションドライバが配列に設定されました。ファイルに変更すると、エラーはなくなりました。しかし、配列を使用するとどうなりますか?
111 php  laravel  csrf  laravel-5.5 

12
Django Rest Frameworkがcsrfを削除
Django Rest Frameworkに関する回答があることは知っていますが、問題の解決策を見つけることができませんでした。 認証といくつかの機能を備えたアプリケーションがあります。Django Rest Frameworkを使用する新しいアプリを追加しました。このアプリだけでライブラリを使いたい。また、POSTリクエストを作成したいのですが、常にこのレスポンスを受け取ります。 { "detail": "CSRF Failed: CSRF token missing or incorrect." } 私は次のコードを持っています: # urls.py from django.conf.urls import patterns, url urlpatterns = patterns( 'api.views', url(r'^object/$', views.Object.as_view()), ) # views.py from rest_framework.views import APIView from rest_framework.response import Response from django.views.decorators.csrf import csrf_exempt class Object(APIView): @csrf_exempt def post(self, …

3
Rails 3でCSRFトークンをオフにする
iPhoneアプリケーションにいくつかのAPIを提供するRailsアプリがあります。正しいCSRFトークンを取得することを気にせずに、リソースに簡単に投稿できるようにしたい。私はここでstackoverflowで見られるいくつかの方法を試しましたが、レール3では機能しないようです。 助けてくれてありがとう。

2
CORS OriginヘッダーとCSRFトークンによるCSRF保護
この質問は、クロスサイトリクエストフォージェリ攻撃のみに対する保護についてです。 具体的には:Originヘッダー(CORS)による保護は、CSRFトークンによる保護と同じくらい優れていますか? 例: Aliceは、ブラウザーを使用して(Cookieを使用して) " https://example.com "にログインします。彼女は最新のブラウザを使用していると思います。 アリスが「https://evil.com」にアクセスし、evil.comのクライアント側コードが「https://example.com」への何らかの要求を実行します(従来のCSRFシナリオ)。 そう: Originヘッダー(サーバー側)をチェックせず、CSRFトークンもチェックしない場合、CSRFセキュリティホールがあります。 CSRFトークンをチェックすれば安全です(ただし、少々面倒です)。 Originヘッダーを確認する場合、evil.comのクライアント側コードからのリクエストは、CSRFトークンを使用する場合と同様にブロックする必要があります。ただし、evil.comのコードでOriginヘッダーを設定できる場合は除きます。 私は、W3C仕様がすべての最新のブラウザーで正しく実装されていると信頼できる場合(少なくとも、クロスオリジンリソースシェアリングのセキュリティを参照)、これはXHRでは不可能であることを知っています(できるでしょうか?) しかし、他の種類のリクエストについてはどうでしょう-例えばフォーム送信?script / img / ...タグをロードしますか?または、ページがリクエストを(合法的に)作成するために使用できる他の方法?それとも、いくつかの既知のJSハック? 注:私は話していません ネイティブアプリケーション 操作されたブラウザ、 example.comのページのクロスサイトスクリプティングのバグ ...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.