HTTPQUERY
Bahasa Indonesia

403 Forbidden

Penggunaan

Ketika error 403 Forbidden diterima, klien tidak memiliki izin yang memadai untuk mengakses sumber daya tersebut. Ini adalah error yang umum dan bersifat umum, yang memberi tahu klien bahwa permintaannya tidak diizinkan. Status ini berbeda dari 401 Unauthorized karena error tetap muncul bahkan setelah klien melakukan autentikasi ulang dan mengirim ulang permintaan. Status yang lebih spesifik, 405 Method Not Allowed, menunjukkan bahwa sumber daya tersedia tetapi metode HTTP tertentu tidak diperbolehkan.

403 vs 404 sebagai keputusan keamanan

Server sengaja mengembalikan 404 alih-alih 403 untuk menyembunyikan fakta bahwa sebuah sumber daya memang ada. Merespons dengan 403 justru memastikan bahwa sumber daya tersebut ada namun dibatasi aksesnya, yang tidak diinginkan untuk path yang sensitif. Memilih antara 403 dan 404 merupakan keputusan desain keamanan yang disengaja.

Dampak SEO

Mesin pencari seperti Google tidak mengindeks URL yang mengembalikan status 403. URL yang sebelumnya terindeks namun kini mengembalikan kode status ini akan dihapus dari hasil pencarian. Halaman yang mengembalikan kode ini tidak memboroskan crawl budget. Jangan gunakan 403 untuk memperlambat Googlebot. Hanya 429 yang menurunkan laju perayapan.

Contoh

Klien meminta sebuah sumber daya yang terlindungi dan server merespons dengan 403 Forbidden untuk menunjukkan bahwa klien tidak memiliki akses. Body respons menjelaskan pembatasan tersebut.

Permintaan

GET /tech-news/confidential.pdf HTTP/1.1
Host: example.com

Respons

HTTP/1.1 403 Forbidden
Content-Type: text/html
Content-Length: 154

<html>
  <head>
    <title>Access Denied</title>
  </head>
  <body>
    <p>Permission to access this resource is
    restricted.</p>
  </body>
</html>

Cara memperbaiki

403 Forbidden berarti server memahami permintaan tersebut tetapi menolak mengotorisasi tindakannya.

Verifikasi izin file dan direktori pada server. Di Linux, periksa kepemilikan dan bit izin dengan ls -la. Proses web server (umumnya berjalan sebagai www-data atau nginx) memerlukan akses baca terhadap file yang diminta. Izin standar: 755 untuk direktori, 644 untuk file. Perbaiki secara rekursif:

find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;
chown -R www-data:www-data /var/www/html

nginx juga memerlukan izin eksekusi pada setiap direktori induk di sepanjang path dari / hingga ke file yang disajikan.

Periksa .htaccess atau konfigurasi server untuk mencari aturan deny. Direktif Require pada Apache, aturan deny pada nginx, atau kontrol akses serupa memblokir path atau rentang IP tertentu. Pada Apache, cari Require all denied atau Deny from all di .htaccess atau di dalam blok . Pada nginx, cari deny all; di dalam blok location. Tinjau file konfigurasi terkait dan periksa error log untuk mengetahui alasan penolakan yang spesifik.

Pastikan IP permintaan tidak diblokir. Firewall, web application firewall (WAF), atau aturan geo-blocking menolak permintaan dari alamat yang dibatasi. Periksa access log server untuk mencari entri penolakan. Cloudflare, AWS WAF, dan mod_security semuanya menghasilkan respons 403 ketika aturannya terpicu. Tinjau dashboard WAF atau audit log untuk mengidentifikasi aturan yang memblokir.

Pastikan pengguna yang terautentikasi memiliki role atau scope yang dibutuhkan. Bahkan dengan autentikasi yang valid, akun tersebut tetap memerlukan tingkat izin yang tepat. Verifikasi penetapan role pada sistem kontrol akses aplikasi. Endpoint API kerap mengembalikan 403 ketika token tidak memiliki scope OAuth yang dibutuhkan.

Periksa pengaturan indeks direktori saat meminta sebuah folder. Meminta sebuah direktori tanpa file indeks default (misalnya index.html) mengembalikan 403 ketika directory listing dinonaktifkan. Tambahkan file indeks atau aktifkan listing. Pada nginx:

location /files/ {
    autoindex on;
}

Pada Apache, tambahkan Options +Indexes ke konfigurasi direktori. Mengaktifkan directory listing pada server produksi menimbulkan risiko keamanan.

Periksa kebijakan SELinux atau AppArmor. Pada sistem RHEL/CentOS, SELinux menolak akses web server ke file di luar path yang diharapkan sekalipun izin Unix mengizinkan pembacaan. Jalankan sestatus untuk memeriksa mode SELinux dan tinjau /var/log/audit/audit.log untuk entri yang ditolak. Beri label ulang file dengan restorecon -Rv /var/www/html atau atur konteks yang benar dengan chcon.

Periksa persyaratan sertifikat klien SSL/TLS. Server yang dikonfigurasi untuk mutual TLS mengembalikan 403 ketika klien tidak menyajikan sertifikat yang valid. Periksa direktif ssl_verify_client pada nginx atau direktif SSLVerifyClient pada Apache.

Referensi kode

.NET

HttpStatusCode.Forbidden

Rust

http::StatusCode::FORBIDDEN

Rails

:forbidden

Go

http.StatusForbidden

Symfony

Response::HTTP_FORBIDDEN

Python3.5+

http.HTTPStatus.FORBIDDEN

Java

java.net.HttpURLConnection.HTTP_FORBIDDEN

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_FORBIDDEN

Angular

@angular/common/http/HttpStatusCode.Forbidden