---
title: "Perlindungan clickjacking"
version: 5.2
locale: id
source: https://docs.djangoproject.com/id/5.2/ref/clickjacking/
canonical: https://djangodocs.dev/id/5.2/ref/clickjacking/
---
# Perlindungan clickjacking

Middleware clickjacking dan penghias menyediakan perlindungan mudah-digunakan terhadap [clickjacking](https://en.wikipedia.org/wiki/Clickjacking). Serangan jenis ini muncul ketika sebuah situs berbahaya memperdaya pengguna mengklik pada unsur tersembunyi dari situ selain yang mereka telah muat di kerangka tersembunyi atau iframe.

## Sebuah contoh dari clickjacking

Suppose an online store has a page where a logged-in user can click "Buy Now" to
purchase an item. A user has chosen to stay logged into the store all the time
for convenience. An attacker site might create an "I Like Ponies" button on one
of their own pages, and load the store's page in a transparent iframe such that
the "Buy Now" button is invisibly overlaid on the "I Like Ponies" button. If the
user visits the attacker's site, clicking "I Like Ponies" will cause an
inadvertent click on the "Buy Now" button and an unknowing purchase of the item.

## Mencegah clickjacking

Permban modern menghargai kepala HTTP [X-Frame-Options](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options) yang menunjukkan apakah atau tidak sumber daya diizinkan memuat dalam sebuah kerangka atau iframe. Jika tanggapan mengandung kepala dengan sebuah nilai dari `SAMEORIGIN` kemudian peramban akan hanya memuat sumber daya di sebuah ekrangka jika permintaan berasal dari situ sama. Jika kepala disetel menjadi `DENY` kemudian peramban akan memblok sumber daya dari memuat dalam sebuah kerangka tidak peduli situs mana membuat permintaan.

Django menyediakan sedikit cara untuk menyertakan kepala ini dalam tanggapan dari situs anda:

1. Sebuah middleware yang mensetel kepala dalam semua tanggapan.
2. Sekumpulan dari penghias tampilan yang dapat digunakan untuk menimpa middleware atau untuk hanya menyetel kepala untuk tampilan tertentu.

Kepala HTTP `X-Frame-Options` akan hanya disetel dengan middleware atau penghias tampilan jika itu belum hadir di tanggapan.

## Bagaimana menggunakannya

### Megnatur `X-Frame-Options` untuk semua tanggapan

Untuk menyetel nilai `X-Frame-Options` untuk semua tanggapan di situs anda, taruh `'django.middleware.clickjacking.XFrameOptionsMiddleware'` pada [`MIDDLEWARE`](/id/5.2/ref/settings/#std-setting-MIDDLEWARE):

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

Middleware diadakan di berkas pengaturan dibangkitkan oleh [`startproject`](/id/5.2/ref/django-admin/#django-admin-startproject).

By default, the middleware will set the `X-Frame-Options` header to
`DENY` for every outgoing `HttpResponse`. If you want any other value for
this header instead, set the [`X_FRAME_OPTIONS`](/id/5.2/ref/settings/#std-setting-X_FRAME_OPTIONS) setting:

```
X_FRAME_OPTIONS = "SAMEORIGIN"
```

Ketika menggunakan middleware ada mungkin beberapa tampilan dimana dan *tidak* ingin menyetel kepala `X-Frame-Options`. Untuk kasus-kasus tersebut, anda dapat menggunakan sebuah tampilan penghias yang memeribtahu middleware tidak menyetel kepala:

```
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.")
```

> **Note**
>
> Jika anda ingin mengajukan sebuah formulir atau mengakses sebuah kue sesi dalam sebuah kerangka atau iframe, anda mungkin butuh merubah pengaturan [`CSRF_COOKIE_SAMESITE`](/id/5.2/ref/settings/#std-setting-CSRF_COOKIE_SAMESITE) or [`SESSION_COOKIE_SAMESITE`](/id/5.2/ref/settings/#std-setting-SESSION_COOKIE_SAMESITE).

### Mengatur `X-Frame-Options` per tampilan

Untuk menyetel kepala `X-Frame-Options` pada dasar pertampilan, Django menyediakan penghias ini:

```
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.")
```

Catat bahwa anda dapat menggunakan penghias di penghubungan dengan middleware. Gunakan penghias menimpa middleware.

## Batasan

The `X-Frame-Options` header will only protect against clickjacking in
[modern browsers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options#browser_compatibility).
