{"title":"クロスサイトリクエストフォージェリ (CSRF) 対策","version":"5.1","locale":"ja","docname":"ref/csrf","url":"/ja/5.1/ref/csrf/","canonical":"https://djangodocs.dev/ja/5.1/ref/csrf/","summary":"CSRF ミドルウェアとテンプレートタグは、簡単に扱える Cross Site Request Forgeries 対策を提供しています。このタイプの攻撃は、訪問者のログイン情報を悪用してあなたのサイトに何らかの操作を行うことを目的とした、リンクやフォームボタン、 JavaScript…","html":"<span id=\"cross-site-request-forgery-protection\"></span><h1>クロスサイトリクエストフォージェリ (CSRF) 対策<a class=\"heading-anchor\" href=\"#module-django.middleware.csrf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>CSRF ミドルウェアとテンプレートタグは、簡単に扱える <a class=\"reference external\" href=\"https://owasp.org/www-community/attacks/csrf#overview\">Cross Site Request Forgeries</a> 対策を提供しています。このタイプの攻撃は、訪問者のログイン情報を悪用してあなたのサイトに何らかの操作を行うことを目的とした、リンクやフォームボタン、 JavaScript を設置した悪意のあるウェブサイトによって行われます。また、関連する攻撃として、ユーザーを騙して別のユーザー権限でログインさせる 'ログイン CSRF' と呼ばれる攻撃もありますが、これも対策に含まれます。</p>\n<p>CSRF 攻撃に対する第一の防御は、 GET リクエスト (および <span class=\"target\" id=\"index-6\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-9.2.1\"><strong>RFC 9110 Section 9.2.1</strong></a> で定義された ‘安全な’ メソッド) から副作用を取り除くというものです。そして、 POST、PUT、DELETE のような、’安全でない’ メソッドによるリクエストについては、 <a class=\"reference internal\" href=\"/ja/5.1/howto/csrf/#using-csrf\"><span class=\"std std-ref\">Django の CSRF 保護を利用する</span></a> で説明されている手順で保護できます。</p>\n<section id=\"how-it-works\">\n<span id=\"how-csrf-works\"></span><h2>しくみ<a class=\"heading-anchor\" href=\"#how-it-works\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>CSRF対策は以下のようなことを基本としています:</p>\n<ol class=\"arabic\">\n<li><p>他のサイトがアクセスできないランダムな秘密の値である CSRF クッキー。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">django.middleware.csrf.get_token()</span></code> が呼び出されると、常にこのクッキーをレスポンスと一緒に送信します。その他の場合にも送信できます。セキュリティ上の理由から、secret の値はユーザがログインするたびに変更されます。</p>\n</li>\n<li><p>&quot;csrfmiddlewaretoken&quot; と名付けられた、すべての送信 POST フォームに存在する隠しフォームフィールド。</p>\n<p><a class=\"reference external\" href=\"https://www.breachattack.com/\">BREACH</a> 攻撃から守るために、このフィールドの値は単なる秘密ではありません。マスクを使って、レスポンスごとに異なるスクランブルをかけます。マスクは <code class=\"docutils literal notranslate\"><span class=\"pre\">get_token()</span></code> を呼び出すたびにランダムに生成されるので、フォームフィールドの値は毎回異なります。</p>\n<p>この部分は、<a class=\"reference internal\" href=\"/ja/5.1/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> テンプレートタグによって行われます。</p>\n</li>\n<li><p>HTTP GET、HEAD、OPTIONS、または TRACE を使用していないすべての受信リクエストについて、CSRF クッキーが存在し、&quot;csrfmiddlewaretoken&quot; フィールドが正しく存在する必要があります。存在しない場合、ユーザは 403 エラーを受け取ります。</p>\n<p>&quot;csrfmiddlewaretoken&quot; フィールドの値を検証するとき、完全なトークンではなくシークレットだけがクッキー値のシークレットと比較されます。これにより、常に変化するトークンを使うことができます。各リクエストは固有のトークンを使うかもしれませんが、シークレットはすべてのリクエストに共通のままです。</p>\n<p>このチェックは <code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code> によって行われます。</p>\n</li>\n<li><p><code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code> はブラウザから提供された場合、現在のホストと <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_TRUSTED_ORIGINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_TRUSTED_ORIGINS</span></code></a> 設定に対して <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin\">Origin header</a> を検証します。これにより、クロスサブドメイン攻撃から保護されます。</p></li>\n<li><p>さらに、HTTPS リクエストの場合、<code class=\"docutils literal notranslate\"><span class=\"pre\">Origin</span></code> ヘッダーが提供されない場合には、<code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code> は厳密なリファラチェックを実行します。これは、サブドメインがあなたのドメインに対してクッキーを設定または変更できるとしても、そのリクエストがあなた自身の正確なドメインから来ない限り、ユーザーがあなたのアプリケーションに対して投稿を強制することはできないことを意味します。</p>\n<p>これはまた、セッションに依存しない秘密を使用するときに HTTPS で可能な中間者攻撃 (man-in-the-middle attack) に対処するためでもあります。 HTTP の <code class=\"docutils literal notranslate\"><span class=\"pre\">Set-Cookie</span></code> ヘッダは (残念ながら) クライアントが HTTPS でサイトと通信しているときでも受け付けられます。 (<code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code> ヘッダーの存在が HTTP 下では十分に信頼できないため、HTTP リクエストに対してはリファラチェックは行われません。)</p>\n<p>もし <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_DOMAIN</span></code></a> 設定が設定されていれば、リファラはその設定と比較されます。先頭のドットを指定することで、クロスサブドメインリクエストを許可できます。たとえば、<code class=\"docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_DOMAIN</span> <span class=\"pre\">=</span> <span class=\"pre\">'.example.com'</span></code> は <code class=\"docutils literal notranslate\"><span class=\"pre\">www.example.com</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">api.example.com</span></code> からの POST リクエストを許可します。この設定が設定されていない場合、referer は HTTP の <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code> ヘッダと一致しなければなりません。</p>\n<p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_TRUSTED_ORIGINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_TRUSTED_ORIGINS</span></code></a> 設定により、現在のホストやクッキーのドメインを超えてリファラを拡張できます。</p>\n</li>\n</ol>\n<p>これにより、信頼できるドメインから送信されたフォームだけが、データを POST するために使用できるようになります。</p>\n<p>GET リクエスト（および <span class=\"target\" id=\"index-7\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-9.2.1\"><strong>RFC 9110 Section 9.2.1</strong></a> によって「安全」と定義されている他のリクエスト）を意図的に無視します。これらのリクエストは決して潜在的に危険な副作用を持つべきではなく、したがって GET リクエストを使用した CSRF 攻撃は無害であるべきです。 <span class=\"target\" id=\"index-8\"></span><a class=\"rfc reference external\" href=\"https://datatracker.ietf.org/doc/html/rfc9110.html#section-9.2.1\"><strong>RFC 9110 Section 9.2.1</strong></a> は POST、PUT、DELETE を「安全でない」と定義し、最大限の保護のためには、他のすべてのメソッドも安全でないとみなされます。</p>\n<p>CSRF保護は中間者攻撃に対して保護することはできませんので、<a class=\"reference internal\" href=\"/ja/5.1/topics/security/#security-recommendation-ssl\"><span class=\"std std-ref\">HTTPS</span></a> を <a class=\"reference internal\" href=\"/ja/5.1/ref/middleware/#http-strict-transport-security\"><span class=\"std std-ref\">HTTP Strict Transport Security</span></a> と共に使用してください。また、<a class=\"reference internal\" href=\"/ja/5.1/topics/security/#host-headers-virtual-hosting\"><span class=\"std std-ref\">HOSTヘッダーの検証</span></a> が行われていること、およびサイト上に <a class=\"reference internal\" href=\"/ja/5.1/topics/security/#cross-site-scripting\"><span class=\"std std-ref\">クロスサイトスクリプティングの脆弱性</span></a> が存在しないことを前提としています（なぜなら、XSSの脆弱性は既に攻撃者がCSRFの脆弱性を利用して行えること、そしてそれ以上のことを可能にするからです）。</p>\n<aside class=\"admonition-removing-the-referer-header admonition\">\n<p class=\"admonition-title\">リファラヘッダーの削除</p>\n<p>サードパーティのサイトにリファラURLを公開しないようにするには、自分のサイトの <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;a&gt;</span></code> タグでリファラを無効にするとよいでしょう ( <a class=\"reference external\" href=\"https://www.w3.org/TR/referrer-policy/#referrer-policy-delivery\">disable the referer</a> ) 。たとえば、 <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;meta</span> <span class=\"pre\">name=&quot;referrer&quot;</span> <span class=\"pre\">content=&quot;no-referrer&quot;&gt;</span></code> タグを使うか、 <code class=\"docutils literal notranslate\"><span class=\"pre\">Referrer-Policy:</span> <span class=\"pre\">no-referrer</span></code> ヘッダを含めます。CSRF による HTTPS リクエストの厳格な参照元チェックにより、これらのテクニックは「安全でない」メソッドを含むリクエストで CSRF 失敗の原因となります。代わりに、サードパーティのサイトへのリンクには <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;a</span> <span class=\"pre\">rel=&quot;noreferrer&quot;</span> <span class=\"pre\">...&gt;&quot;</span></code> のような代替手段を使用してください。</p>\n</aside>\n</section>\n<section id=\"limitations\">\n<span id=\"csrf-limitations\"></span><h2>制限事項<a class=\"heading-anchor\" href=\"#limitations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>サイト内のサブドメインは、ドメイン全体のクライアントにクッキーを設定できます。クッキーを設定し、対応するトークンを使うことで、サブドメインは CSRF 防御を回避できます。これを避ける唯一の方法は、サブドメインが信頼されたユーザによって管理される（あるいは、少なくともクッキーを設定できない）ようにすることです。CSRF がなくても、セッションの固定化など、サブドメインを信頼できない相手に与えることを悪用する脆弱性は他にもあり、これらの脆弱性は現在のブラウザでは簡単に修正できないことに注意してください。</p>\n</section>\n<section id=\"module-django.views.decorators.csrf\">\n<span id=\"utilities\"></span><h2>ユーティリティ<a class=\"heading-anchor\" href=\"#module-django.views.decorators.csrf\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>以下の例では、関数ベースのビューを使っていることを想定しています。クラスベースのビューを使っている場合は、<a class=\"reference internal\" href=\"/ja/5.1/topics/class-based-views/intro/#id1\"><span class=\"std std-ref\">Decorating class-based views</span></a> を参照してください。</p>\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.csrf.csrf_exempt\">\n<span class=\"sig-name descname\"><span class=\"pre\">csrf_exempt</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">view</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.csrf.csrf_exempt\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このデコレータは、ビューがミドルウェアによる保護の対象外であることを示します。例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.http</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">HttpResponse</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.csrf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">csrf_exempt</span>\n\n\n<span class=\"nd\">@csrf_exempt</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"k\">return</span> <span class=\"n\">HttpResponse</span><span class=\"p\">(</span><span class=\"s2\">&quot;Hello world&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.0\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>非同期ビュー関数のラップをサポートしました。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.csrf.csrf_protect\">\n<span class=\"sig-name descname\"><span class=\"pre\">csrf_protect</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">view</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.csrf.csrf_protect\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>ビューに対する <code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code> の保護を提供するデコレータです。</p>\n<p>使い方は以下の通りです:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.csrf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">csrf_protect</span>\n\n\n<span class=\"nd\">@csrf_protect</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;a_template.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.0\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>非同期ビュー関数のラップをサポートしました。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.csrf.requires_csrf_token\">\n<span class=\"sig-name descname\"><span class=\"pre\">requires_csrf_token</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">view</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.csrf.requires_csrf_token\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>通常 <a class=\"reference internal\" href=\"/ja/5.1/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> テンプレートタグは <code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware.process_view</span></code> または <code class=\"docutils literal notranslate\"><span class=\"pre\">csrf_protect</span></code> のような等価なものが実行されていないと動作しません。ビューデコレータ <code class=\"docutils literal notranslate\"><span class=\"pre\">requires_csrf_token</span></code> を使用すると、テンプレートタグを確実に動作させることができます。このデコレータは <code class=\"docutils literal notranslate\"><span class=\"pre\">csrf_protect</span></code> と同様に動作しますが、リクエストを拒否することはありません。</p>\n<p>実装例:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">render</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.views.decorators.csrf</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">requires_csrf_token</span>\n\n\n<span class=\"nd\">@requires_csrf_token</span>\n<span class=\"k\">def</span><span class=\"w\"> </span><span class=\"nf\">my_view</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">):</span>\n    <span class=\"n\">c</span> <span class=\"o\">=</span> <span class=\"p\">{}</span>\n    <span class=\"c1\"># ...</span>\n    <span class=\"k\">return</span> <span class=\"n\">render</span><span class=\"p\">(</span><span class=\"n\">request</span><span class=\"p\">,</span> <span class=\"s2\">&quot;a_template.html&quot;</span><span class=\"p\">,</span> <span class=\"n\">c</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"version-note version-changed\" data-version=\"5.0\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>非同期ビュー関数のラップをサポートしました。</p>\n</aside>\n</dd></dl>\n\n<dl class=\"py function\">\n<dt class=\"sig sig-object py\" id=\"django.views.decorators.csrf.ensure_csrf_cookie\">\n<span class=\"sig-name descname\"><span class=\"pre\">ensure_csrf_cookie</span></span><span class=\"sig-paren\">(</span><em class=\"sig-param\"><span class=\"n\"><span class=\"pre\">view</span></span></em><span class=\"sig-paren\">)</span><a class=\"heading-anchor\" href=\"#django.views.decorators.csrf.ensure_csrf_cookie\"><span class=\"visually-hidden\">Link to this definition</span><span aria-hidden=\"true\">#</span></a></dt>\n<dd><p>このデコレータはビューに強制的に CSRF クッキーを送信させます。</p>\n<aside class=\"version-note version-changed\" data-version=\"5.0\">\n<p class=\"version-note-title\">Changed in Django 5.0</p><p>非同期ビュー関数のラップをサポートしました。</p>\n</aside>\n</dd></dl>\n\n</section>\n<section id=\"settings\">\n<h2>設定<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django の CSRF 動作を制御するための、多くの設定があります:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_AGE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_AGE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_DOMAIN\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_DOMAIN</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_HTTPONLY\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_HTTPONLY</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_NAME</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_PATH\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_PATH</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_SAMESITE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_SAMESITE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_SECURE</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_FAILURE_VIEW\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_FAILURE_VIEW</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_HEADER_NAME\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_HEADER_NAME</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_TRUSTED_ORIGINS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_TRUSTED_ORIGINS</span></code></a></p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_USE_SESSIONS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_USE_SESSIONS</span></code></a></p></li>\n</ul>\n</section>\n<section id=\"frequently-asked-questions\">\n<h2>よくある質問<a class=\"heading-anchor\" href=\"#frequently-asked-questions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"is-posting-an-arbitrary-csrf-token-pair-cookie-and-post-data-a-vulnerability\">\n<h3>任意の CSRF トークンのペア(クッキーと POST データ)を投稿するのは脆弱性ではないですか?<a class=\"heading-anchor\" href=\"#is-posting-an-arbitrary-csrf-token-pair-cookie-and-post-data-a-vulnerability\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>いいえ、これは設計によるものです。中間者攻撃がなければ、攻撃者が CSRF トークン・クッキーを被害者のブラウザに送信する方法はありません。したがって、攻撃を成功させるには、XSS などによって被害者のブラウザのクッキーを取得する必要がありますが、その場合、攻撃者は通常 CSRF 攻撃を必要としません。</p>\n<p>セキュリティ監査ツールの中には、これを問題視するものもありますが、前述のように、攻撃者はユーザのブラウザの CSRF クッキーを盗むことはできません。FirebugやChromeの開発ツールなどを使って <em>自分自身</em> のトークンを「盗んだり」修正したりすることは脆弱性ではありません。</p>\n</section>\n<section id=\"is-it-a-problem-that-django-s-csrf-protection-isn-t-linked-to-a-session-by-default\">\n<h3>Django の CSRF 防御がデフォルトでセッションにリンクされていないのは問題ではないですか？<a class=\"heading-anchor\" href=\"#is-it-a-problem-that-django-s-csrf-protection-isn-t-linked-to-a-session-by-default\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>いいえ、これは設計によるものです。CSRF 防御をセッションにリンクしないことで、 <em>pastebin</em> のような、セッションを持たない匿名ユーザからの投稿を許可するサイトで保護を使用できます。</p>\n<p>CSRF トークンをユーザのセッションに保存したい場合は、 <a class=\"reference internal\" href=\"/ja/5.1/ref/settings/#std-setting-CSRF_USE_SESSIONS\"><code class=\"xref std std-setting docutils literal notranslate\"><span class=\"pre\">CSRF_USE_SESSIONS</span></code></a> 設定を使用します。</p>\n</section>\n<section id=\"why-might-a-user-encounter-a-csrf-validation-failure-after-logging-in\">\n<h3>ログイン後に CSRF 検証に失敗するのはなぜですか？<a class=\"heading-anchor\" href=\"#why-might-a-user-encounter-a-csrf-validation-failure-after-logging-in\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>セキュリティ上の理由から、CSRF トークンはユーザがログインするたびにローテーションされます。ログイン前にフォームが生成されたページは、古くて無効な CSRF トークンを持つことになり、再読み込みが必要になります。これは、ユーザがログイン後に戻るボタンを使用した場合や、別のブラウザのタブでログインした場合に発生することがあります。</p>\n</section>\n</section>","rootId":"module-django.middleware.csrf","toc":[{"title":"しくみ","anchor":"how-it-works","children":[]},{"title":"制限事項","anchor":"limitations","children":[]},{"title":"ユーティリティ","anchor":"module-django.views.decorators.csrf","children":[]},{"title":"設定","anchor":"settings","children":[]},{"title":"よくある質問","anchor":"frequently-asked-questions","children":[{"title":"任意の CSRF トークンのペア(クッキーと POST データ)を投稿するのは脆弱性ではないですか?","anchor":"is-posting-an-arbitrary-csrf-token-pair-cookie-and-post-data-a-vulnerability","children":[]},{"title":"Django の CSRF 防御がデフォルトでセッションにリンクされていないのは問題ではないですか？","anchor":"is-it-a-problem-that-django-s-csrf-protection-isn-t-linked-to-a-session-by-default","children":[]},{"title":"ログイン後に CSRF 検証に失敗するのはなぜですか？","anchor":"why-might-a-user-encounter-a-csrf-validation-failure-after-logging-in","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API リファレンス","url":"/ja/5.1/ref/"}],"prev":{"docname":"ref/contrib/syndication","title":"配信 (syndication) フィード フレームワーク","url":"/ja/5.1/ref/contrib/syndication/"},"next":{"docname":"ref/databases","title":"データベース","url":"/ja/5.1/ref/databases/"},"formats":{"html":"/ja/5.1/ref/csrf/","markdown":"/ja/5.1/ref/csrf.md","json":"/ja/5.1/ref/csrf.json"},"source":"https://github.com/django/django/blob/stable/5.1.x/docs/ref/csrf.txt","official":"https://docs.djangoproject.com/ja/5.1/ref/csrf/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","zh-hans","fr","ja","id","it","pt-br","ko","es","el","pl"]}