{"title":"Skydd mot Cross Site Request Forgery","version":"6.0","locale":"sv","docname":"ref/csrf","url":"/sv/6.0/ref/csrf/","canonical":"https://djangodocs.dev/sv/6.0/ref/csrf/","summary":"CSRF middleware och template tag ger ett lättanvänt skydd mot Cross Site Request Forgeries . Denna typ av attack inträffar när en skadlig webbplats innehåller en…","html":"<span id=\"cross-site-request-forgery-protection\"></span><h1>Skydd mot Cross Site Request Forgery<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 middleware och template tag ger ett lättanvänt skydd mot <a class=\"reference external\" href=\"https://owasp.org/www-community/attacks/csrf#overview\">Cross Site Request Forgeries</a>. Denna typ av attack inträffar när en skadlig webbplats innehåller en länk, en formulärknapp eller JavaScript som är avsedd att utföra någon åtgärd på din webbplats med hjälp av inloggningsuppgifterna för en inloggad användare som besöker den skadliga webbplatsen i sin webbläsare. En relaterad typ av attack, ”login CSRF”, där en angripande webbplats lurar en användares webbläsare att logga in på en webbplats med någon annans inloggningsuppgifter, omfattas också.</p>\n<p>Det första försvaret mot CSRF-attacker är att se till att GET-begäranden (och andra ”säkra” metoder, enligt definitionen i <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>) är bieffektsfria. Förfrågningar via ”osäkra” metoder, som POST, PUT och DELETE, kan sedan skyddas genom de steg som beskrivs i <a class=\"reference internal\" href=\"/sv/6.0/howto/csrf/#using-csrf\"><span class=\"std std-ref\">Så här använder du Djangos CSRF-skydd</span></a>.</p>\n<section id=\"how-it-works\">\n<span id=\"how-csrf-works\"></span><h2>Hur det fungerar<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-skyddet baseras på följande saker:</p>\n<ol class=\"arabic\">\n<li><p>En CSRF-cookie som är ett slumpmässigt hemligt värde, som andra webbplatser inte har tillgång till.</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code> skickar denna cookie med svaret när <code class=\"docutils literal notranslate\"><span class=\"pre\">django.middleware.csrf.get_token()</span></code> anropas. Den kan också skicka den i andra fall. Av säkerhetsskäl ändras värdet på hemligheten varje gång en användare loggar in.</p>\n</li>\n<li><p>Ett dolt formulärfält med namnet ”csrfmiddlewaretoken”, som finns i alla utgående POST-formulär.</p>\n<p>För att skydda mot <a class=\"reference external\" href=\"https://www.breachattack.com/\">BREACH</a>-attacker är värdet i detta fält inte bara hemligheten. Det krypteras på olika sätt för varje svar med hjälp av en mask. Masken genereras slumpmässigt vid varje anrop till <code class=\"docutils literal notranslate\"><span class=\"pre\">get_token()</span></code>, så formulärfältets värde är olika varje gång.</p>\n<p>Denna del görs av <a class=\"reference internal\" href=\"/sv/6.0/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> malltagg.</p>\n</li>\n<li><p>För alla inkommande förfrågningar som inte använder HTTP GET, HEAD, OPTIONS eller TRACE måste en CSRF-cookie finnas och fältet ”csrfmiddlewaretoken” måste finnas och vara korrekt. Om så inte är fallet kommer användaren att få ett 403-fel.</p>\n<p>Vid validering av fältvärdet ”csrfmiddlewaretoken” jämförs endast hemligheten, inte hela token, med hemligheten i cookie-värdet. Detta gör det möjligt att använda ständigt föränderliga token. Även om varje begäran kan använda sin egen token förblir hemligheten gemensam för alla.</p>\n<p>Denna kontroll görs av <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> verifierar <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin\">Origin header</a>, om det tillhandahålls av webbläsaren, mot den aktuella värden och inställningen <a class=\"reference internal\" href=\"/sv/6.0/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>. Detta ger skydd mot attacker över flera underdomäner.</p></li>\n<li><p>Dessutom, för HTTPS-förfrågningar, om <code class=\"docutils literal notranslate\"><span class=\"pre\">Origin</span></code>-headern inte tillhandahålls, utför <code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code> strikt referer-kontroll. Detta innebär att även om en underdomän kan ställa in eller ändra cookies på din domän, kan den inte tvinga en användare att posta till din applikation eftersom den begäran inte kommer från din egen exakta domän.</p>\n<p>Detta hanterar också en man-in-the-middle-attack som är möjlig under HTTPS när en sessionsoberoende hemlighet används, på grund av att HTTP <code class=\"docutils literal notranslate\"><span class=\"pre\">Set-Cookie</span></code>-rubriker (tyvärr) accepteras av klienter även när de pratar med en webbplats under HTTPS. (Referer-kontroll görs inte för HTTP-förfrågningar eftersom närvaron av <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code>-rubriken inte är tillräckligt tillförlitlig under HTTP)</p>\n<p>Om inställningen <a class=\"reference internal\" href=\"/sv/6.0/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> är angiven jämförs referensen mot den. Du kan tillåta förfrågningar över underdomäner genom att inkludera en inledande punkt. Till exempel: kommer <code class=\"docutils literal notranslate\"><span class=\"pre\">CSRF_COOKIE_DOMAIN</span> <span class=\"pre\">=</span> <span class=\"pre\">'.example.com'</span></code> att tillåta POST-förfrågningar från <code class=\"docutils literal notranslate\"><span class=\"pre\">www.example.com</span></code> och <code class=\"docutils literal notranslate\"><span class=\"pre\">api.example.com</span></code>. Om inställningen inte är angiven måste referensen matcha HTTP-rubriken <code class=\"docutils literal notranslate\"><span class=\"pre\">Host</span></code>.</p>\n<p>Att utöka de accepterade referenserna utöver den aktuella värd- eller cookiedomänen kan göras med inställningen <a class=\"reference internal\" href=\"/sv/6.0/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>Detta säkerställer att endast formulär som kommer från betrodda domäner kan användas för att skicka tillbaka data.</p>\n<p>Den ignorerar avsiktligt GET-begäranden (och andra begäranden som definieras som ”säkra” av <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>). Dessa förfrågningar borde aldrig ha några potentiellt farliga bieffekter, och därför borde en CSRF-attack med en GET-förfrågan vara ofarlig. <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> definierar POST, PUT och DELETE som ”osäkra”, och alla andra metoder antas också vara osäkra, för maximalt skydd.</p>\n<p>CSRF-skyddet kan inte skydda mot man-in-the-middle-attacker, så använd <a class=\"reference internal\" href=\"/sv/6.0/topics/security/#security-recommendation-ssl\"><span class=\"std std-ref\">HTTPS</span></a> med <a class=\"reference internal\" href=\"/sv/6.0/ref/middleware/#http-strict-transport-security\"><span class=\"std std-ref\">HTTP Strict Transport Security</span></a>. Det förutsätter också <a class=\"reference internal\" href=\"/sv/6.0/topics/security/#host-headers-virtual-hosting\"><span class=\"std std-ref\">validering av HOST-headern</span></a> och att det inte finns några <a class=\"reference internal\" href=\"/sv/6.0/topics/security/#cross-site-scripting\"><span class=\"std std-ref\">cross-site scripting-sårbarheter</span></a> på din webbplats (eftersom XSS-sårbarheter redan låter en angripare göra allt som en CSRF-sårbarhet tillåter och mycket värre).</p>\n<aside class=\"admonition-removing-the-referer-header admonition\">\n<p class=\"admonition-title\">Ta bort rubriken <code class=\"docutils literal notranslate\"><span class=\"pre\">Referer</span></code></p>\n<p>För att undvika att avslöja referentens URL till tredjepartswebbplatser kanske du vill <a class=\"reference external\" href=\"https://www.w3.org/TR/referrer-policy/#referrer-policy-delivery\">inaktivera referenten</a> på webbplatsens <code class=\"docutils literal notranslate\"><span class=\"pre\">&lt;a&gt;</span></code>-taggar. Du kan till exempel använda taggen <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> eller inkludera rubriken <code class=\"docutils literal notranslate\"><span class=\"pre\">Referrer-Policy:</span> <span class=\"pre\">no-referrer</span></code>. På grund av CSRF-skyddets strikta referer-kontroll på HTTPS-förfrågningar orsakar dessa tekniker ett CSRF-misslyckande på förfrågningar med ”osäkra” metoder. Använd istället alternativ som <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> för länkar till tredjepartswebbplatser.</p>\n</aside>\n</section>\n<section id=\"limitations\">\n<span id=\"csrf-limitations\"></span><h2>Begränsningar<a class=\"heading-anchor\" href=\"#limitations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Underdomäner inom en webbplats kommer att kunna ställa in cookies på klienten för hela domänen. Genom att ställa in cookien och använda en motsvarande token kan underdomäner kringgå CSRF-skyddet. Det enda sättet att undvika detta är att se till att underdomäner kontrolleras av betrodda användare (eller åtminstone inte kan ställa in cookies). Observera att även utan CSRF finns det andra sårbarheter, t.ex. sessionsfixering, som gör att det är en dålig idé att ge underdomäner till icke betrodda parter, och dessa sårbarheter kan inte enkelt åtgärdas med nuvarande webbläsare.</p>\n</section>\n<section id=\"module-django.views.decorators.csrf\">\n<span id=\"utilities\"></span><h2>Verktyg<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>Exemplen nedan förutsätter att du använder funktionsbaserade vyer. Om du arbetar med klassbaserade vyer kan du läsa <a class=\"reference internal\" href=\"/sv/6.0/topics/class-based-views/intro/#id1\"><span class=\"std std-ref\">Dekorera klassbaserade vyer</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>Denna dekorator markerar att en vy är undantagen från det skydd som säkerställs av mellanvaran. Exempel:</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</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>Dekoratör som ger skydd av <a class=\"reference internal\" href=\"/sv/6.0/ref/middleware/#django.middleware.csrf.CsrfViewMiddleware\" title=\"django.middleware.csrf.CsrfViewMiddleware\"><code class=\"xref py py-class docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware</span></code></a> till en vy.</p>\n<p>Användning:</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</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>Normalt fungerar inte malltaggen <a class=\"reference internal\" href=\"/sv/6.0/ref/templates/builtins/#std-templatetag-csrf_token\"><code class=\"xref std std-ttag docutils literal notranslate\"><span class=\"pre\">csrf_token</span></code></a> om inte <code class=\"docutils literal notranslate\"><span class=\"pre\">CsrfViewMiddleware.process_view</span></code> eller motsvarande som <code class=\"docutils literal notranslate\"><span class=\"pre\">csrf_protect</span></code> har körts. Vydekoratorn <code class=\"docutils literal notranslate\"><span class=\"pre\">requires_csrf_token</span></code> kan användas för att säkerställa att malltaggen fungerar. Denna dekorator fungerar på liknande sätt som <code class=\"docutils literal notranslate\"><span class=\"pre\">csrf_protect</span></code>, men avvisar aldrig en inkommande begäran.</p>\n<p>Exempel:</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</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>Denna dekorator tvingar en vy att skicka CSRF-cookien.</p>\n</dd></dl>\n\n</section>\n<section id=\"settings\">\n<h2>Inställningar<a class=\"heading-anchor\" href=\"#settings\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Ett antal inställningar kan användas för att styra Djangos CSRF-beteende:</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference internal\" href=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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=\"/sv/6.0/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>Vanliga frågor<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>Är det en sårbarhet att lägga upp ett godtyckligt CSRF-tokenpar (cookie och POST-data)?<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>Nej, detta är avsiktligt. Utan en man-in-the-middle-attack finns det inget sätt för en angripare att skicka en CSRF-token-cookie till ett offers webbläsare, så en framgångsrik attack skulle behöva få offrets webbläsares cookie via XSS eller liknande, i vilket fall en angripare vanligtvis inte behöver CSRF-attacker.</p>\n<p>Vissa säkerhetsgranskningsverktyg flaggar detta som ett problem, men som nämnts tidigare kan en angripare inte stjäla en användares webbläsares CSRF-cookie. att ”stjäla” eller modifiera * din egen * token med Firebug, Chrome dev tools, etc. är inte en sårbarhet.</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>Är det ett problem att Djangos CSRF-skydd inte är kopplat till en session som standard?<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>Nej, detta är avsiktligt. Att inte koppla CSRF-skydd till en session gör det möjligt att använda skyddet på webbplatser som en <em>pastebin</em> som tillåter inskick från anonyma användare som inte har en session.</p>\n<p>Om du vill lagra CSRF-token i användarens session ska du använda inställningen <a class=\"reference internal\" href=\"/sv/6.0/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>Varför kan en användare stöta på ett CSRF-valideringsfel efter att ha loggat in?<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>Av säkerhetsskäl roteras CSRF-tokens varje gång en användare loggar in. Alla sidor med ett formulär som genereras före en inloggning kommer att ha en gammal, ogiltig CSRF-token och måste laddas om. Detta kan hända om en användare använder bakåtknappen efter en inloggning eller om de loggar in i en annan webbläsarflik.</p>\n</section>\n</section>","rootId":"module-django.middleware.csrf","toc":[{"title":"Hur det fungerar","anchor":"how-it-works","children":[]},{"title":"Begränsningar","anchor":"limitations","children":[]},{"title":"Verktyg","anchor":"module-django.views.decorators.csrf","children":[]},{"title":"Inställningar","anchor":"settings","children":[]},{"title":"Vanliga frågor","anchor":"frequently-asked-questions","children":[{"title":"Är det en sårbarhet att lägga upp ett godtyckligt CSRF-tokenpar (cookie och POST-data)?","anchor":"is-posting-an-arbitrary-csrf-token-pair-cookie-and-post-data-a-vulnerability","children":[]},{"title":"Är det ett problem att Djangos CSRF-skydd inte är kopplat till en session som standard?","anchor":"is-it-a-problem-that-django-s-csrf-protection-isn-t-linked-to-a-session-by-default","children":[]},{"title":"Varför kan en användare stöta på ett CSRF-valideringsfel efter att ha loggat in?","anchor":"why-might-a-user-encounter-a-csrf-validation-failure-after-logging-in","children":[]}]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/6.0/ref/"}],"prev":{"docname":"ref/csp","title":"Content Security Policy","url":"/sv/6.0/ref/csp/"},"next":{"docname":"ref/databases","title":"Databaser","url":"/sv/6.0/ref/databases/"},"formats":{"html":"/sv/6.0/ref/csrf/","markdown":"/sv/6.0/ref/csrf.md","json":"/sv/6.0/ref/csrf.json"},"source":"https://github.com/django/django/blob/stable/6.0.x/docs/ref/csrf.txt","official":"https://docs.djangoproject.com/sv/6.0/ref/csrf/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}