{"title":"Säkerhet i Django","version":"6.1","locale":"sv","docname":"topics/security","url":"/sv/6.1/topics/security/","canonical":"https://djangodocs.dev/sv/6.1/topics/security/","summary":"Detta dokument är en översikt över Djangos säkerhetsfunktioner. Det innehåller råd om hur du säkrar en Djangodriven webbplats.","html":"<h1>Säkerhet i Django<a class=\"heading-anchor\" href=\"#security-in-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<p>Detta dokument är en översikt över Djangos säkerhetsfunktioner. Det innehåller råd om hur du säkrar en Djangodriven webbplats.</p>\n<aside class=\"admonition-real-world-security admonition\" role=\"note\">\n<p class=\"admonition-title\">Säkerhet i verkliga miljöer</p>\n<p>Djangos implementationer för webbsäkerhet har utformats med säkerhet för verkliga applikationer i åtanke. Django är ett allmänt webbramverk och dess standardinställningar återspeglar detta – de är inte den bästa lösningen för varje enskilt fall. Särskilda fall förtjänar särskild uppmärksamhet utifrån sina behov.</p>\n<p>Webbsäkerhet kräver ett flerskiktat angreppssätt. Att endast skydda en enda angreppsvektor gör inte en webbplats säker som helhet, och inte heller innebär en enskild uppenbar svaghet nödvändigtvis att hela webbplatsen äventyras. Detta bör särskilt beaktas vid bedömning av enskilda punkter i säkerhetsgranskningar.</p>\n</aside>\n<section id=\"always-sanitize-user-input\">\n<span id=\"sanitize-user-input\"></span><h2>Rengör alltid användarens inmatning<a class=\"heading-anchor\" href=\"#always-sanitize-user-input\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Den gyllene regeln för säkerhet i webbapplikationer är att aldrig lita på användarkontrollerade data. Därför bör alla användarinmatningar rensas innan de används i din applikation. Se <a class=\"reference internal\" href=\"/sv/6.1/topics/forms/\"><span class=\"doc\">formulardokumentation</span></a> för detaljer om validering av användarinmatningar i Django.</p>\n</section>\n<section id=\"cross-site-scripting-xss-protection\">\n<span id=\"cross-site-scripting\"></span><h2>Skydd mot skriptövergripande attacker (XSS)<a class=\"heading-anchor\" href=\"#cross-site-scripting-xss-protection\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Vid en skriptövergripande attack injiceras skadlig kod i form av ett skript på klientsidan i en annan användares webbläsare, där den körs.</p>\n<p>Detta görs vanligen genom att:</p>\n<ul class=\"simple\">\n<li><p>lagra det skadliga skriptet i databasen, där det hämtas och visas för andra användare i deras webbläsare, eller</p></li>\n<li><p>få användare att klicka på en länk som gör att angriparens JavaScript körs i användarens webbläsare.</p></li>\n</ul>\n<p>Cross-site scripting-angrepp kan komma från vilken otillförlitlig datakälla som helst, inklusive kakor eller webbtjänster, om data inte rensas tillräckligt innan de publiceras på en sida.</p>\n<p>Django-mallar skyddar mot majoriteten av skriptövergripande attacker genom att <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/language/#automatic-html-escaping\"><span class=\"std std-ref\">automatiskt undanta tecken som utgör en risk</span></a> (det vill säga HTML-tecken som webbläsaren skulle kunna <em>tolka</em> med skadlig effekt <em>visas</em> i stället säkert).</p>\n<p>Skyddets omfattning och begränsningar bör dock förstås.</p>\n<p>Tvetydighet mellan utvecklarens avsikt och hur webbläsaren tolkar HTML kan utsätta klienten för oavsiktlig exekvering av kod. Anta att en utvecklare skapar:</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>&lt;style class={{ var }}&gt;...&lt;/style&gt;\n</code></pre></div>\n<p>där <code class=\"docutils literal notranslate\">var</code> förväntas innehålla något i stil med <code class=\"docutils literal notranslate\">'class1'</code>. Om <code class=\"docutils literal notranslate\">var</code> i stället sätts till <code class=\"docutils literal notranslate\">'class1 onmouseover=javascript:func()'</code> kan detta leda till otillåten körning av JavaScript på grund av skillnader i hur webbläsare tolkar denna bristfälliga HTML.</p>\n<p>En uttrycklig mallutformning där citattecknen inte lämnas åt variabeln att tillhandahålla:</p>\n<div class=\"code-block\" data-language=\"html+django\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Django template</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=\"Django template code\"><code><span class=\"p\">&lt;</span><span class=\"nt\">style</span> <span class=\"na\">class</span><span class=\"o\">=</span><span class=\"s\">&quot;</span><span class=\"cp\">{{</span> <span class=\"nv\">var</span> <span class=\"cp\">}}</span><span class=\"s\">&quot;</span><span class=\"p\">&gt;</span><span class=\"o\">...</span><span class=\"p\">&lt;/</span><span class=\"nt\">style</span><span class=\"p\">&gt;</span>\n</code></pre></div>\n<p>skulle undanröja denna möjlighet.</p>\n<p>Det är också viktigt att vara särskilt försiktig när attributet <code class=\"docutils literal notranslate\">is_safe</code> används med egna malltaggar, mallfiltret <a class=\"reference internal\" href=\"/sv/6.1/ref/templates/builtins/#std-templatefilter-safe\"><code class=\"xref std std-tfilter docutils literal notranslate\">safe</code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/utils/#module-django.utils.safestring\" title=\"django.utils.safestring: Functions and classes for working with strings that can be displayed safely without further escaping in HTML.\"><code class=\"xref py py-mod docutils literal notranslate\">mark_safe</code></a> och när automatisk undantagning är avstängd.</p>\n<p>Djangos inbyggda undantagning är avsedd att skydda HTML-utdata. Om mallsystemet används för att skapa något annat än HTML kan de tecken och strängar som kräver undantagning vara helt annorlunda.</p>\n<p>Var dessutom mycket försiktig när HTML lagras i databasen, särskilt när HTML:en hämtas och visas. Om HTML:en inte garanterat kommer från en betrodd källa – användarindata är <em>inte</em> en betrodd källa – bör lagrad HTML kontrolleras och saneras, helst både vid indata och utdata.</p>\n</section>\n<section id=\"cross-site-request-forgery-csrf-protection\">\n<h2>Skydd mot förfalskade begäranden mellan webbplatser (CSRF)<a class=\"heading-anchor\" href=\"#cross-site-request-forgery-csrf-protection\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>CSRF-attacker gör det möjligt för en illasinnad användare att utföra åtgärder med hjälp av en annan användares inloggningsuppgifter utan den användarens vetskap eller samtycke.</p>\n<p>Django har ett inbyggt skydd mot de flesta typer av CSRF-attacker, förutsatt att du har <a class=\"reference internal\" href=\"/sv/6.1/howto/csrf/#using-csrf\"><span class=\"std std-ref\">aktiverat och använt det</span></a> där det är lämpligt. Men som med alla begränsningstekniker finns det begränsningar. Det är till exempel möjligt att inaktivera CSRF-modulen globalt eller för vissa vyer. Du bör bara göra detta om du vet vad du gör. Det finns andra <a class=\"reference internal\" href=\"/sv/6.1/ref/csrf/#csrf-limitations\"><span class=\"std std-ref\">begränsningar</span></a> om din webbplats har underdomäner som ligger utanför din kontroll.</p>\n<p><a class=\"reference internal\" href=\"/sv/6.1/ref/csrf/#how-csrf-works\"><span class=\"std std-ref\">CSRF-skyddet fungerar</span></a> genom att kontrollera om det finns en hemlig kod i varje POST-begäran. Detta säkerställer att en illvillig användare inte kan ”spela upp” en POST-begäran till din webbplats och få en annan inloggad användare att omedvetet skicka in formuläret. Den illvilliga användaren måste känna till den hemliga koden, som är användarspecifik (med hjälp av en cookie).</p>\n<p>Vid distribution med <a class=\"reference internal\" href=\"#security-recommendation-ssl\"><span class=\"std std-ref\">HTTPS</span></a> kommer <code class=\"docutils literal notranslate\">CsrfViewMiddleware</code> att kontrollera att HTTP-referer-headern är inställd på en URL med samma ursprung (inklusive underdomän och port). Eftersom HTTPS ger ytterligare säkerhet är det absolut nödvändigt att se till att anslutningar använder HTTPS där det är tillgängligt genom att vidarebefordra osäkra anslutningsförfrågningar och använda HSTS för webbläsare som stöds.</p>\n<p>Var mycket försiktig med att markera vyer med dekoratorn <code class=\"docutils literal notranslate\">csrf_exempt</code> om det inte är absolut nödvändigt.</p>\n</section>\n<section id=\"sql-injection-protection\">\n<span id=\"id1\"></span><h2>Skydd mot SQL-injektion<a class=\"heading-anchor\" href=\"#sql-injection-protection\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>SQL-injektion är en typ av attack där en illasinnad användare kan köra godtycklig SQL-kod i en databas. Detta kan resultera i att poster raderas eller att data läcker ut.</p>\n<p>Djangos querysets är skyddade från SQL-injektion eftersom deras frågor är konstruerade med hjälp av query parameterization. En frågas SQL-kod definieras separat från frågans parametrar. Eftersom parametrar kan vara användartillhandahållna och därför osäkra, escapas de av den underliggande databasdrivrutinen.</p>\n<p>Django ger också utvecklare möjlighet att skriva <a class=\"reference internal\" href=\"/sv/6.1/topics/db/sql/#executing-raw-queries\"><span class=\"std std-ref\">raw queries</span></a> eller exekvera <a class=\"reference internal\" href=\"/sv/6.1/topics/db/sql/#executing-custom-sql\"><span class=\"std std-ref\">custom sql</span></a>. Dessa funktioner bör användas sparsamt och du bör alltid vara noga med att korrekt escape alla parametrar som användaren kan kontrollera. Dessutom bör du vara försiktig när du använder <a class=\"reference internal\" href=\"/sv/6.1/ref/models/querysets/#django.db.models.query.QuerySet.extra\" title=\"django.db.models.query.QuerySet.extra\"><code class=\"xref py py-meth docutils literal notranslate\">extra()</code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/models/expressions/#django.db.models.expressions.RawSQL\" title=\"django.db.models.expressions.RawSQL\"><code class=\"xref py py-class docutils literal notranslate\">RawSQL</code></a>.</p>\n</section>\n<section id=\"clickjacking-protection\">\n<h2>Skydd mot klickjacking<a class=\"heading-anchor\" href=\"#clickjacking-protection\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Clickjacking är en typ av attack där en skadlig webbplats kapslar in en annan webbplats i en ram. Denna attack kan leda till att en intet ont anande användare luras att utföra oavsiktliga åtgärder på målwebbplatsen.</p>\n<p>Django innehåller <a class=\"reference internal\" href=\"/sv/6.1/ref/clickjacking/#clickjacking-prevention\"><span class=\"std std-ref\">clickjacking protection</span></a> i form av <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/#django.middleware.clickjacking.XFrameOptionsMiddleware\" title=\"django.middleware.clickjacking.XFrameOptionsMiddleware\"><code class=\"xref py py-mod docutils literal notranslate\">X-Frame-Options middleware</code></a> som i en webbläsare med stöd kan förhindra att en webbplats återges inuti en ram. Det är möjligt att inaktivera skyddet per vy eller att konfigurera det exakta rubrikvärdet som skickas.</p>\n<p>Middleware rekommenderas starkt för alla webbplatser som inte behöver ha sina sidor inbakade i en ram av webbplatser från tredje part, eller som bara behöver tillåta det för en liten del av webbplatsen.</p>\n</section>\n<section id=\"ssl-https\">\n<span id=\"security-recommendation-ssl\"></span><h2>SSL/HTTPS<a class=\"heading-anchor\" href=\"#ssl-https\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Det är alltid bättre ur säkerhetssynpunkt att distribuera din webbplats bakom HTTPS. Utan detta är det möjligt för illvilliga nätverksanvändare att sniffa autentiseringsuppgifter eller annan information som överförs mellan klient och server, och i vissa fall - <strong>aktiva</strong> nätverksangripare - att ändra data som skickas i båda riktningarna.</p>\n<p>Om du vill ha det skydd som HTTPS ger och har aktiverat det på din server, finns det några ytterligare steg som du kan behöva:</p>\n<ul>\n<li><p>Om det behövs, ställ in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECURE_PROXY_SSL_HEADER\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_PROXY_SSL_HEADER</code></a>, och se till att du har förstått varningarna där noggrant. Om du inte gör detta kan det leda till CSRF-sårbarheter, och om du inte gör det på rätt sätt kan det också vara farligt!</p></li>\n<li><p>Sätt <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECURE_SSL_REDIRECT\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_SSL_REDIRECT</code></a> till <code class=\"docutils literal notranslate\">True</code>, så att förfrågningar via HTTP omdirigeras till HTTPS.</p>\n<p>Observera förbehållen under <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECURE_PROXY_SSL_HEADER\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_PROXY_SSL_HEADER</code></a>. När det gäller en omvänd proxy kan det vara enklare eller säkrare att konfigurera huvudwebbservern för att göra omdirigeringen till HTTPS.</p>\n</li>\n<li><p>Använd ”säkra” cookies.</p>\n<p>Om en webbläsare initialt ansluter via HTTP, vilket är standard för de flesta webbläsare, är det möjligt att befintliga cookies läcker ut. Av denna anledning bör du ställa in inställningarna <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SESSION_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\">SESSION_COOKIE_SECURE</code></a> och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-CSRF_COOKIE_SECURE\"><code class=\"xref std std-setting docutils literal notranslate\">CSRF_COOKIE_SECURE</code></a> till <code class=\"docutils literal notranslate\">True</code>. Detta instruerar webbläsaren att endast skicka dessa cookies via HTTPS-anslutningar. Observera att detta innebär att sessioner inte fungerar via HTTP och att CSRF-skyddet förhindrar att POST-data accepteras via HTTP (vilket är bra om du omdirigerar all HTTP-trafik till HTTPS).</p>\n</li>\n<li><p>Använd <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/#http-strict-transport-security\"><span class=\"std std-ref\">HTTP Strict Transport Security</span></a> (HSTS)</p>\n<p>HSTS är en HTTP-header som informerar en webbläsare om att alla framtida anslutningar till en viss webbplats alltid ska använda HTTPS. I kombination med omdirigering av förfrågningar via HTTP till HTTPS säkerställer detta att anslutningar alltid har den extra säkerheten hos SSL förutsatt att en lyckad anslutning har skett. HSTS kan antingen konfigureras med <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECURE_HSTS_SECONDS\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_HSTS_SECONDS</code></a>, <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECURE_HSTS_INCLUDE_SUBDOMAINS\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_HSTS_INCLUDE_SUBDOMAINS</code></a>, och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECURE_HSTS_PRELOAD\"><code class=\"xref std std-setting docutils literal notranslate\">SECURE_HSTS_PRELOAD</code></a>, eller på webbservern.</p>\n</li>\n</ul>\n</section>\n<section id=\"host-header-validation\">\n<span id=\"host-headers-virtual-hosting\"></span><h2>Validering av värdhuvud<a class=\"heading-anchor\" href=\"#host-header-validation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django använder rubriken <code class=\"docutils literal notranslate\">Host</code> som tillhandahålls av klienten för att konstruera URL:er i vissa fall. Dessa värden saneras för att förhindra skriptövergripande attacker, men ett förfalskat <code class=\"docutils literal notranslate\">Host</code>-värde kan användas för förfalskade begäranden mellan webbplatser, cacheförgiftningsattacker och förgiftning av länkar i e-postmeddelanden.</p>\n<p>Eftersom även till synes säkra webbserverkonfigurationer är mottagliga för förfalskade <code class=\"docutils literal notranslate\">Host</code>-rubriker validerar Django <code class=\"docutils literal notranslate\">Host</code>-rubriker mot inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\">ALLOWED_HOSTS</code></a> i metoden <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest.get_host\" title=\"django.http.HttpRequest.get_host\"><code class=\"xref py py-meth docutils literal notranslate\">django.http.HttpRequest.get_host()</code></a>.</p>\n<p>Denna validering tillämpas endast via <a class=\"reference internal\" href=\"/sv/6.1/ref/request-response/#django.http.HttpRequest.get_host\" title=\"django.http.HttpRequest.get_host\"><code class=\"xref py py-meth docutils literal notranslate\">get_host()</code></a>; om din kod hämtar <code class=\"docutils literal notranslate\">Host</code>-rubriken direkt från <code class=\"docutils literal notranslate\">request.META</code> kringgår du detta säkerhetsskydd.</p>\n<p>För mer information se den fullständiga <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\">ALLOWED_HOSTS</code></a>-dokumentationen.</p>\n<aside class=\"admonition admonition-warning\" role=\"note\">\n<p class=\"admonition-title\">Varning</p>\n<p>I tidigare versioner av detta dokument rekommenderades att konfigurera webbservern så att den validerar inkommande HTTP <code class=\"docutils literal notranslate\">Host</code>-rubriker. Detta rekommenderas fortfarande, men i många vanliga webbservrar kanske en konfiguration som verkar validera <code class=\"docutils literal notranslate\">Host</code>-rubriken inte gör det i själva verket. Till exempel, även om Apache är konfigurerad så att din Django-webbplats serveras från en virtuell värd som inte är standard med inställningen <code class=\"docutils literal notranslate\">ServerName</code>, är det fortfarande möjligt för en HTTP-begäran att matcha denna virtuella värd och leverera en falsk <code class=\"docutils literal notranslate\">Host</code>-rubrik. Därför kräver Django nu att du ställer in <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-ALLOWED_HOSTS\"><code class=\"xref std std-setting docutils literal notranslate\">ALLOWED_HOSTS</code></a> uttryckligen snarare än att förlita dig på webbserverns konfiguration.</p>\n</aside>\n<p>Dessutom kräver Django att du uttryckligen aktiverar stöd för rubriken <code class=\"docutils literal notranslate\">X-Forwarded-Host</code> (via inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-USE_X_FORWARDED_HOST\"><code class=\"xref std std-setting docutils literal notranslate\">USE_X_FORWARDED_HOST</code></a>) om din konfiguration kräver det.</p>\n</section>\n<section id=\"referrer-policy\">\n<h2>Policy för hänvisare<a class=\"heading-anchor\" href=\"#referrer-policy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Webbläsare använder rubriken <code class=\"docutils literal notranslate\">Referer</code> som ett sätt att skicka information till en webbplats om hur användarna kom dit. Genom att ställa in en <em>Referrer Policy</em> kan du hjälpa till att skydda dina användares integritet genom att begränsa under vilka omständigheter rubriken <code class=\"docutils literal notranslate\">Referer</code> ställs in. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/#referrer-policy\"><span class=\"std std-ref\">the referrer policy section of the security middleware reference</span></a> för mer information.</p>\n</section>\n<section id=\"cross-origin-opener-policy\">\n<h2>Policy för öppning av Cross-origin<a class=\"heading-anchor\" href=\"#cross-origin-opener-policy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Med rubriken COOP (Cross-origin Opener Policy) kan webbläsare isolera ett toppfönster från andra dokument genom att placera dem i en annan kontextgrupp så att de inte kan interagera direkt med toppfönstret. Om ett dokument som skyddas av COOP öppnar ett popup-fönster med ursprung i andra länder, kommer popup-fönstrets egenskap <code class=\"docutils literal notranslate\">window.opener</code> att vara <code class=\"docutils literal notranslate\">null</code>. COOP skyddar mot cross-origin-attacker. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/middleware/#cross-origin-opener-policy\"><span class=\"std std-ref\">the cross-origin opener policy section of the security middleware reference</span></a> för detaljer.</p>\n</section>\n<section id=\"cross-origin-resource-sharing-cors\">\n<h2>Resursdelning mellan olika ursprung (CORS)<a class=\"heading-anchor\" href=\"#cross-origin-resource-sharing-cors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Cross-Origin Resource Sharing (CORS) styr vilka ursprung som får åtkomst till resurser från din webbplats via webbläsaren. Django har inte inbyggt stöd för CORS-rubriker.</p>\n<aside class=\"admonition-there-are-community-maintained-solutions admonition\" role=\"note\">\n<p class=\"admonition-title\">Det finns lösningar som underhålls av communityn!</p>\n<p>Django har ett livfullt ekosystem. På sidan <a class=\"reference external\" href=\"https://www.djangoproject.com/community/ecosystem/#security-middleware\">Community Ecosystem</a> finns CORS- och middlewarelösningar. Django Packages <a class=\"reference external\" href=\"https://djangopackages.org/grids/g/security/\">Security grid</a> erbjuder ännu fler alternativ!</p>\n</aside>\n</section>\n<section id=\"session-security\">\n<h2>Säkerhet för sessioner<a class=\"heading-anchor\" href=\"#session-security\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>I likhet med <a class=\"reference internal\" href=\"/sv/6.1/ref/csrf/#csrf-limitations\"><span class=\"std std-ref\">CSRF limitations</span></a> som kräver att en webbplats distribueras så att icke betrodda användare inte har tillgång till några underdomäner, har <a class=\"reference internal\" href=\"/sv/6.1/topics/http/sessions/#module-django.contrib.sessions\" title=\"django.contrib.sessions: Provides session management for Django projects.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.sessions</code></a> också begränsningar. Se <a class=\"reference internal\" href=\"/sv/6.1/topics/http/sessions/#topics-session-security\"><span class=\"std std-ref\">avsnittet om säkerhet i sessionens ämnesguide</span></a> för mer information.</p>\n</section>\n<section id=\"user-uploaded-content\">\n<span id=\"user-uploaded-content-security\"></span><h2>Innehåll som laddats upp av användare<a class=\"heading-anchor\" href=\"#user-uploaded-content\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">Observera</p>\n<p>Överväg att <a class=\"reference internal\" href=\"/sv/6.1/howto/static-files/deployment/#staticfiles-from-cdn\"><span class=\"std std-ref\">servera statiska filer från en molntjänst eller CDN</span></a> för att undvika några av dessa problem.</p>\n</aside>\n<ul>\n<li><p>Om webbplatsen tar emot filuppladdningar rekommenderas starkt att begränsa dessa till en rimlig storlek i webbserverkonfigurationen för att förebygga överbelastningsangrepp (DoS). I Apache kan detta enkelt anges med direktivet <a class=\"reference external\" href=\"https://httpd.apache.org/docs/2.4/mod/core.html#limitrequestbody\">LimitRequestBody</a>. Du bör inte enbart förlita dig på <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATA_UPLOAD_MAX_MEMORY_SIZE\"><code class=\"xref std std-setting docutils literal notranslate\">DATA_UPLOAD_MAX_MEMORY_SIZE</code></a> eller <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-FILE_UPLOAD_MAX_MEMORY_SIZE\"><code class=\"xref std std-setting docutils literal notranslate\">FILE_UPLOAD_MAX_MEMORY_SIZE</code></a>.</p></li>\n<li><p>Om du serverar dina egna statiska filer måste du se till att hanterare som Apaches <code class=\"docutils literal notranslate\">mod_php</code>, som skulle exekvera statiska filer som kod, är inaktiverade. Du vill inte att användare ska kunna exekvera godtycklig kod genom att ladda upp och begära en speciellt utformad fil.</p></li>\n<li><p>Djangos hantering av uppladdning av media utgör vissa sårbarheter när media serveras på sätt som inte följer bästa praxis för säkerhet. Specifikt kan en HTML-fil laddas upp som en bild om filen innehåller en giltig PNG-header följt av skadlig HTML. Den här filen kommer att klara verifiering av det bibliotek som Django använder för <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#django.db.models.ImageField\" title=\"django.db.models.ImageField\"><code class=\"xref py py-class docutils literal notranslate\">ImageField</code></a> bildbehandling (Pillow). När den här filen sedan visas för en användare kan den visas som HTML beroende på typ och konfiguration av din webbserver.</p>\n<p>Det finns ingen skottsäker teknisk lösning på ramverksnivå för att på ett säkert sätt validera allt filinnehåll som laddas upp av användaren, men det finns några andra åtgärder du kan vidta för att mildra dessa attacker:</p>\n<ol class=\"arabic simple\">\n<li><p>En klass av attacker kan förhindras genom att alltid servera innehåll som laddats upp av användaren från en separat toppdomän eller andra nivådomän. Detta förhindrar alla typer av attacker som blockeras av ”samma-ursprungs-policy”-skydd, t.ex. cross site scripting. Om din webbplats till exempel körs på <code class=\"docutils literal notranslate\">example.com</code>, skulle du vilja servera uppladdat innehåll (inställningen <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-MEDIA_URL\"><code class=\"xref std std-setting docutils literal notranslate\">MEDIA_URL</code></a>) från något i stil med <code class=\"docutils literal notranslate\">usercontent-example.com</code>. Det är <em>inte</em> tillräckligt att servera innehåll från en underdomän som <code class=\"docutils literal notranslate\">usercontent.example.com</code>.</p></li>\n<li><p>Utöver detta kan applikationer välja att definiera en lista över tillåtna filändelser för filer som laddas upp av användaren och konfigurera webbservern så att den endast hanterar sådana filer.</p></li>\n</ol>\n</li>\n</ul>\n</section>\n<section id=\"form-submissions\">\n<h2>Formulärinsändningar<a class=\"heading-anchor\" href=\"#form-submissions\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<ul class=\"simple\">\n<li><p>Formulärinskick som innehåller filer begränsas inte av <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-DATA_UPLOAD_MAX_MEMORY_SIZE\"><code class=\"xref std std-setting docutils literal notranslate\">DATA_UPLOAD_MAX_MEMORY_SIZE</code></a>. Under ASGI kan hela begäran buffras till disk innan någon kontroll av filstorlek utförs. Det rekommenderas starkt att begränsa maximal storlek på begärandetexten i webbserverkonfigurationen för att förebygga överbelastningsangrepp (DoS).</p></li>\n</ul>\n</section>\n<section id=\"content-security-policy\">\n<span id=\"security-csp\"></span><h2>Content Security Policy<a class=\"heading-anchor\" href=\"#content-security-policy\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<aside class=\"version-note version-added\" data-version=\"6.0\" role=\"note\">\n<p class=\"version-note-title\">New in Django 6.0</p></aside>\n<p>Content Security Policy (CSP) är en säkerhetsmekanism i webbläsaren som hjälper till att skydda webbapplikationer mot angrepp som cross-site scripting (XSS) och andra innehållsinjektionsangrepp.</p>\n<p>CSP gör det möjligt för webbapplikationer att definiera vilka innehållskällor som är betrodda och instruerar webbläsaren att läsa in, köra eller återge resurser endast från dessa källor. Detta skapar i praktiken en tillåtelselista över innehållsursprung och minskar risken för körning av skadlig kod.</p>\n<p>Viktiga fördelar med att aktivera CSP är bland annat:</p>\n<ol class=\"arabic simple\">\n<li><p>Mildra XSS-angrepp genom att blockera inbäddade skript och begränsa inläsning av externa skript.</p></li>\n<li><p>Kontroll över vilka externa resurser (till exempel bilder, teckensnitt och formatmallar) som kan läsas in.</p></li>\n<li><p>Förhindra oönskad inramning av webbplatsen för att skydda mot clickjacking.</p></li>\n<li><p>Rapportera överträdelser till en angiven slutpunkt för att möjliggöra övervakning och felsökning.</p></li>\n</ol>\n<p>Konfigurationsinstruktioner finns i dokumentationen <a class=\"reference internal\" href=\"/sv/6.1/howto/csp/#csp-config\"><span class=\"std std-ref\">Använda CSP</span></a>. Se <a class=\"reference internal\" href=\"/sv/6.1/ref/csp/#csp-overview\"><span class=\"std std-ref\">CSP-översikten</span></a> för mer information om direktiv och inställningar.</p>\n<section id=\"limitations-and-considerations\">\n<h3>Begränsningar och överväganden<a class=\"heading-anchor\" href=\"#limitations-and-considerations\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Även om CSP är en kraftfull säkerhetsmekanism är det viktigt att förstå dess begränsningar och konsekvenser, särskilt när den används i Django:</p>\n<ul class=\"simple\">\n<li><p>Risker med policyundantag: Undvik att undanta specifika sökvägar eller svar från CSP-skydd. På grund av webbläsarens princip om samma ursprung kan en sårbarhet på en oskyddad sida (till exempel en som tillåter godtycklig skriptinjektion) användas för att angripa skyddade sidor. Att undanta <em>vilken</em> väg som helst kan avsevärt försvaga webbplatsens samlade CSP-skydd.</p></li>\n<li><p>Prestandaomkostnad: Även om den vanligen är försumbar medför CSP viss bearbetningskostnad. Nonce-generering kräver säker slumpmässighet för varje tillämplig begäran. Mät prestandapåverkan för applikationer med hög trafik eller miljöer med begränsade resurser.</p></li>\n<li><p>Webbläsarstöd: Även om CSP nivå 1 och 2 har brett stöd kan nyare direktiv (CSP nivå 3+) eller komplexa policybeteenden skilja sig mellan webbläsare. Testa policyn i de miljöer som ska stödjas.</p></li>\n</ul>\n<p>Trots dessa begränsningar är CSP fortfarande ett viktigt och rekommenderat säkerhetslager för webbapplikationer. Att förstå begränsningarna hjälper dig att utforma en effektivare och tillförlitligare driftsättning.</p>\n</section>\n</section>\n<section id=\"additional-security-topics\">\n<span id=\"id2\"></span><h2>Ytterligare säkerhetsämnen<a class=\"heading-anchor\" href=\"#additional-security-topics\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Även om Django ger ett bra säkerhetsskydd direkt från start är det fortfarande viktigt att distribuera din applikation på rätt sätt och dra nytta av säkerhetsskyddet för webbservern, operativsystemet och andra komponenter.</p>\n<ul class=\"simple\">\n<li><p>Se till att din Python-kod ligger utanför webbserverns rot. Detta säkerställer att din Python-kod inte av misstag visas som ren text (eller av misstag exekveras).</p></li>\n<li><p>Var försiktig med alla <a class=\"reference internal\" href=\"/sv/6.1/ref/models/fields/#file-upload-security\"><span class=\"std std-ref\">användaruppladdade filer</span></a>.</p></li>\n<li><p>Django stryper inte förfrågningar om autentisering av användare. För att skydda mot brute-force-attacker mot autentiseringssystemet kan du överväga att distribuera ett Django-plugin eller en webbservermodul för att strypa dessa begäranden.</p></li>\n<li><p>Håll din <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECRET_KEY\"><code class=\"xref std std-setting docutils literal notranslate\">SECRET_KEY</code></a>, och <a class=\"reference internal\" href=\"/sv/6.1/ref/settings/#std-setting-SECRET_KEY_FALLBACKS\"><code class=\"xref std std-setting docutils literal notranslate\">SECRET_KEY_FALLBACKS</code></a> om den används, hemlig.</p></li>\n<li><p>Det är en god idé att begränsa tillgängligheten till ditt cachningssystem och din databas med hjälp av en brandvägg.</p></li>\n<li><p>Ta en titt på Open Web Application Security Project (OWASP) <a class=\"reference external\" href=\"https://owasp.org/Top10/\">Top 10-lista</a> som identifierar några vanliga sårbarheter i webbapplikationer. Django har verktyg för att hantera vissa av dessa problem, men andra problem måste beaktas i utformningen av ditt projekt.</p></li>\n<li><p>Mozilla diskuterar olika ämnen som rör <a class=\"reference external\" href=\"https://infosec.mozilla.org/guidelines/web_security.html\">webbsäkerhet</a>. Deras sidor innehåller också säkerhetsprinciper som gäller för alla system.</p></li>\n</ul>\n</section>","rootId":"security-in-django","toc":[{"title":"Rengör alltid användarens inmatning","anchor":"always-sanitize-user-input","children":[]},{"title":"Skydd mot skriptövergripande attacker (XSS)","anchor":"cross-site-scripting-xss-protection","children":[]},{"title":"Skydd mot förfalskade begäranden mellan webbplatser (CSRF)","anchor":"cross-site-request-forgery-csrf-protection","children":[]},{"title":"Skydd mot SQL-injektion","anchor":"sql-injection-protection","children":[]},{"title":"Skydd mot klickjacking","anchor":"clickjacking-protection","children":[]},{"title":"SSL/HTTPS","anchor":"ssl-https","children":[]},{"title":"Validering av värdhuvud","anchor":"host-header-validation","children":[]},{"title":"Policy för hänvisare","anchor":"referrer-policy","children":[]},{"title":"Policy för öppning av Cross-origin","anchor":"cross-origin-opener-policy","children":[]},{"title":"Resursdelning mellan olika ursprung (CORS)","anchor":"cross-origin-resource-sharing-cors","children":[]},{"title":"Säkerhet för sessioner","anchor":"session-security","children":[]},{"title":"Innehåll som laddats upp av användare","anchor":"user-uploaded-content","children":[]},{"title":"Formulärinsändningar","anchor":"form-submissions","children":[]},{"title":"Content Security Policy","anchor":"content-security-policy","children":[{"title":"Begränsningar och överväganden","anchor":"limitations-and-considerations","children":[]}]},{"title":"Ytterligare säkerhetsämnen","anchor":"additional-security-topics","children":[]}],"breadcrumbs":[{"docname":"topics/index","title":"Använda Django","url":"/sv/6.1/topics/"}],"prev":{"docname":"topics/pagination","title":"Sidindelning","url":"/sv/6.1/topics/pagination/"},"next":{"docname":"topics/performance","title":"Prestanda och optimering","url":"/sv/6.1/topics/performance/"},"formats":{"html":"/sv/6.1/topics/security/","markdown":"/sv/6.1/topics/security.md","json":"/sv/6.1/topics/security.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/topics/security.txt","official":"https://docs.djangoproject.com/sv/6.1/topics/security/","inVersions":["6.1","6.0","5.2"],"inLocales":["en","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}