# Django 5.2.8 documentation

# Skydd mot klickjacking

The clickjacking middleware and decorators provide easy-to-use protection against clickjacking. This type of attack occurs when a malicious site tricks a user into clicking on a concealed element of another site which they have loaded in a hidden frame or iframe.

## Ett exempel på clickjacking

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.

## Förhindra clickjacking

Moderna webbläsare respekterar HTTP-huvudet X-Frame-Options som anger om en resurs får laddas i en ram eller iframe eller inte. Om svaret innehåller rubriken med värdet `SAMEORIGIN` kommer webbläsaren endast att ladda resursen i en ram om begäran kommer från samma webbplats. Om rubriken är inställd på `DENY` blockerar webbläsaren resursen från att laddas i en ram oavsett vilken webbplats som gjorde begäran.

Django tillhandahåller några sätt att inkludera denna rubrik i svar från din webbplats:

1. Ett middleware som anger rubriken i alla svar.

2. 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.

HTTP-rubriken `X-Frame-Options` kommer endast att ställas in av middleware- eller vydekoratörerna om den inte redan finns i svaret.

## Så här använder du den

### Ställa in `X-Frame-Options` för alla svar

För att ställa in samma värde för `X-Frame-Options` för alla svar på din webbplats, sätt `'django.middleware.clickjacking.XFrameOptionsMiddleware'` till `MIDDLEWARE`:

    MIDDLEWARE = [
        ...,
        "django.middleware.clickjacking.XFrameOptionsMiddleware",
        ...,
    ]

Denna mellanvara aktiveras i inställningsfilen som genereras av `startproject`.

Som standard kommer mellanvaran att sätta `X-Frame-Options`-huvudet till `DENY` för varje utgående `HttpResponse`. Om du vill ha något annat värde för detta huvud istället, ange inställningen `X_FRAME_OPTIONS`:

    X_FRAME_OPTIONS = "SAMEORIGIN"

När du använder mellanvaran kan det finnas vissa vyer där du inte vill att `X-Frame-Options`-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:

    from django.http import HttpResponse
    from django.views.decorators.clickjacking import xframe_options_exempt

    @xframe_options_exempt
    def ok_to_load_in_a_frame(request):
        return HttpResponse("This page is safe to load in a frame on any site.")

Observera

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 `CSRF_COOKIE_SAMESITE` eller `SESSION_COOKIE_SAMESITE`.

### Ställa in `X-Frame-Options` per vy

För att ställa in rubriken `X-Frame-Options` per vy tillhandahåller Django dessa dekoratorer:

    from django.http import HttpResponse
    from django.views.decorators.clickjacking import xframe_options_deny
    from django.views.decorators.clickjacking import xframe_options_sameorigin

    @xframe_options_deny
    def view_one(request):
        return HttpResponse("I won't display in any frame!")

    @xframe_options_sameorigin
    def view_two(request):
        return HttpResponse("Display in a frame if it's from the same origin as me.")

Observera att du kan använda dekoratorerna tillsammans med middleware. Användning av en dekorator åsidosätter middleware.

## Begränsningar

Rubriken `X-Frame-Options` skyddar endast mot clickjacking i moderna webbläsare.