{"title":"Skydd mot klickjacking","version":"5.2","locale":"sv","docname":"ref/clickjacking","url":"/sv/5.2/ref/clickjacking/","canonical":"https://djangodocs.dev/sv/5.2/ref/clickjacking/","summary":"Clickjacking middleware och decorators ger ett lättanvänt skydd mot clickjacking.","html":"<span id=\"clickjacking-protection\"></span><h1>Skydd mot klickjacking<a class=\"heading-anchor\" href=\"#module-django.middleware.clickjacking\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Clickjacking middleware och decorators ger ett lättanvänt skydd mot <a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Clickjacking\">clickjacking</a>.  Denna typ av attack inträffar när en skadlig webbplats lurar en användare att klicka på ett dolt element på en annan webbplats som de har laddat i en dold ram eller iframe.</p>\n<section id=\"an-example-of-clickjacking\">\n<h2>Ett exempel på clickjacking<a class=\"heading-anchor\" href=\"#an-example-of-clickjacking\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Anta att en nätbutik har en sida där en inloggad användare kan klicka på ”Köp nu” för att köpa en artikel. En användare har valt att vara inloggad i butiken hela tiden för enkelhetens skull. En angripare kan skapa en knapp ”Jag gillar ponnyer” på en av sina egna sidor och ladda butikens sida i en transparent iframe så att knappen ”Köp nu” syns osynligt över knappen ”Jag gillar ponnyer”. Om användaren besöker angriparens webbplats kommer ett klick på ”Jag gillar ponnyer” att orsaka ett oavsiktligt klick på knappen ”Köp nu” och ett okänt köp av varan.</p>\n</section>\n<section id=\"preventing-clickjacking\">\n<span id=\"clickjacking-prevention\"></span><h2>Förhindra clickjacking<a class=\"heading-anchor\" href=\"#preventing-clickjacking\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Moderna webbläsare respekterar HTTP-huvudet <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options\">X-Frame-Options</a> som anger om en resurs får laddas i en ram eller iframe eller inte. Om svaret innehåller rubriken med värdet <code class=\"docutils literal notranslate\">SAMEORIGIN</code> kommer webbläsaren endast att ladda resursen i en ram om begäran kommer från samma webbplats. Om rubriken är inställd på <code class=\"docutils literal notranslate\">DENY</code> blockerar webbläsaren resursen från att laddas i en ram oavsett vilken webbplats som gjorde begäran.</p>\n<p>Django tillhandahåller några sätt att inkludera denna rubrik i svar från din webbplats:</p>\n<ol class=\"arabic simple\">\n<li><p>Ett middleware som anger rubriken i alla svar.</p></li>\n<li><p>En uppsättning vydekoratorer som kan användas för att åsidosätta mellanvaran eller för att bara ställa in rubriken för vissa vyer.</p></li>\n</ol>\n<p>HTTP-rubriken <code class=\"docutils literal notranslate\">X-Frame-Options</code> kommer endast att ställas in av middleware- eller vydekoratörerna om den inte redan finns i svaret.</p>\n</section>\n<section id=\"how-to-use-it\">\n<h2>Så här använder du den<a class=\"heading-anchor\" href=\"#how-to-use-it\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<section id=\"setting-x-frame-options-for-all-responses\">\n<h3>Ställa in <code class=\"docutils literal notranslate\">X-Frame-Options</code> för alla svar<a class=\"heading-anchor\" href=\"#setting-x-frame-options-for-all-responses\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att ställa in samma värde för <code class=\"docutils literal notranslate\">X-Frame-Options</code> för alla svar på din webbplats, sätt <code class=\"docutils literal notranslate\">'django.middleware.clickjacking.XFrameOptionsMiddleware'</code> till <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-MIDDLEWARE\"><code class=\"xref std std-setting docutils literal notranslate\">MIDDLEWARE</code></a>:</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>MIDDLEWARE <span class=\"o\">=</span> <span class=\"p\">[</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n    <span class=\"s2\">&quot;django.middleware.clickjacking.XFrameOptionsMiddleware&quot;</span><span class=\"p\">,</span>\n    <span class=\"o\">...</span><span class=\"p\">,</span>\n<span class=\"p\">]</span>\n</code></pre></div>\n<p>Denna mellanvara aktiveras i inställningsfilen som genereras av <a class=\"reference internal\" href=\"/sv/5.2/ref/django-admin/#django-admin-startproject\"><code class=\"xref std std-djadmin docutils literal notranslate\">startproject</code></a>.</p>\n<p>Som standard kommer mellanvaran att sätta <code class=\"docutils literal notranslate\">X-Frame-Options</code>-huvudet till <code class=\"docutils literal notranslate\">DENY</code> för varje utgående <code class=\"docutils literal notranslate\">HttpResponse</code>. Om du vill ha något annat värde för detta huvud istället, ange inställningen <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-X_FRAME_OPTIONS\"><code class=\"xref std std-setting docutils literal notranslate\">X_FRAME_OPTIONS</code></a>:</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>X_FRAME_OPTIONS <span class=\"o\">=</span> <span class=\"s2\">&quot;SAMEORIGIN&quot;</span>\n</code></pre></div>\n<p>När du använder mellanvaran kan det finnas vissa vyer där du <strong>inte</strong> vill att <code class=\"docutils literal notranslate\">X-Frame-Options</code>-huvudet ska ställas in. För dessa fall kan du använda en vydekorator som talar om för mellanvaran att inte ställa in rubriken:</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=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.clickjacking</span> <span class=\"kn\">import</span> xframe_options_exempt\n\n\n<span class=\"nd\">@xframe_options_exempt</span>\n<span class=\"k\">def</span> <span class=\"nf\">ok_to_load_in_a_frame</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;This page is safe to load in a frame on any site.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Om du vill skicka in ett formulär eller komma åt en sessionscookie inom en ram eller iframe kan du behöva ändra inställningarna <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-CSRF_COOKIE_SAMESITE\"><code class=\"xref std std-setting docutils literal notranslate\">CSRF_COOKIE_SAMESITE</code></a> eller <a class=\"reference internal\" href=\"/sv/5.2/ref/settings/#std-setting-SESSION_COOKIE_SAMESITE\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_SAMESITE</code></a>.</p>\n</aside>\n</section>\n<section id=\"setting-x-frame-options-per-view\">\n<h3>Ställa in <code class=\"docutils literal notranslate\">X-Frame-Options</code> per vy<a class=\"heading-anchor\" href=\"#setting-x-frame-options-per-view\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>För att ställa in rubriken <code class=\"docutils literal notranslate\">X-Frame-Options</code> per vy tillhandahåller Django dessa dekoratorer:</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=\"nn\">django.http</span> <span class=\"kn\">import</span> HttpResponse\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.clickjacking</span> <span class=\"kn\">import</span> xframe_options_deny\n<span class=\"kn\">from</span> <span class=\"nn\">django.views.decorators.clickjacking</span> <span class=\"kn\">import</span> xframe_options_sameorigin\n\n\n<span class=\"nd\">@xframe_options_deny</span>\n<span class=\"k\">def</span> <span class=\"nf\">view_one</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;I won&#39;t display in any frame!&quot;</span><span class=\"p\">)</span>\n\n\n<span class=\"nd\">@xframe_options_sameorigin</span>\n<span class=\"k\">def</span> <span class=\"nf\">view_two</span><span class=\"p\">(</span>request<span class=\"p\">):</span>\n    <span class=\"k\">return</span> HttpResponse<span class=\"p\">(</span><span class=\"s2\">&quot;Display in a frame if it&#39;s from the same origin as me.&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>Observera att du kan använda dekoratorerna tillsammans med middleware. Användning av en dekorator åsidosätter middleware.</p>\n</section>\n</section>\n<section id=\"limitations\">\n<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>Rubriken <code class=\"docutils literal notranslate\">X-Frame-Options</code> skyddar endast mot clickjacking i <a class=\"reference external\" href=\"https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#browser_compatibility\">moderna webbläsare</a>.</p>\n</section>","rootId":"module-django.middleware.clickjacking","toc":[{"title":"Ett exempel på clickjacking","anchor":"an-example-of-clickjacking","children":[]},{"title":"Förhindra clickjacking","anchor":"preventing-clickjacking","children":[]},{"title":"Så här använder du den","anchor":"how-to-use-it","children":[{"title":"Ställa in X-Frame-Options för alla svar","anchor":"setting-x-frame-options-for-all-responses","children":[]},{"title":"Ställa in X-Frame-Options per vy","anchor":"setting-x-frame-options-per-view","children":[]}]},{"title":"Begränsningar","anchor":"limitations","children":[]}],"breadcrumbs":[{"docname":"ref/index","title":"API-referens","url":"/sv/5.2/ref/"}],"prev":{"docname":"ref/class-based-views/flattened-index","title":"Klassbaserade generiska vyer - tillplattat index","url":"/sv/5.2/ref/class-based-views/flattened-index/"},"next":{"docname":"ref/contrib/index","title":"contrib paket","url":"/sv/5.2/ref/contrib/"},"formats":{"html":"/sv/5.2/ref/clickjacking/","markdown":"/sv/5.2/ref/clickjacking.md","json":"/sv/5.2/ref/clickjacking.json"},"source":"https://github.com/django/django/blob/stable/5.2.x/docs/ref/clickjacking.txt","official":"https://docs.djangoproject.com/sv/5.2/ref/clickjacking/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}