Bir bağlantıya tıklıyorsunuz ve karşınıza neredeyse boş bir sayfa çıkıyor: büyük harflerle "403 Forbidden", altında da "nginx" sözcüğü. Başka bir site aynı reddi "You don't have permission to access this resource" cümlesiyle bildiriyor. Bazen de Chrome'un kendi gri sayfası açılıyor: siteye erişimin reddedildiği yazıyor, en altta da HTTP ERROR 403.
Bunların hepsi aynı HTTP durum kodudur: sunucu isteğinizi almış, anlamış ve karşılamamaya karar vermiştir. Bu yazıda 403'ün 401 ve 404'ten farkını, sizi kimin geri çevirdiğini nasıl anlayacağınızı, ziyaretçi olarak neler deneyebileceğinizi, site sahibinin kuralı kayıtlarda nasıl bulacağını ve kodunuza ya da proxy üzerinden gelen bir 403'ü nasıl okuyacağınızı anlatıyoruz.
403 Forbidden ne demek?
Bir web sunucusunun gönderdiği her cevap üç haneli bir durum koduyla başlar. 400'lü kodlar sorunun istekte olduğunu söyler; 403 ise "ne istediğinizi biliyorum, cevabım hayır" demenin kodudur. HTTP standardı RFC 9110, 403'ü, sunucunun isteği anladığı ama yerine getirmeyi reddettiği durum olarak tanımlar. Sunucu nedenini gönderdiği sayfada açıklayabilir, ama bunu yapmak zorunda değildir.
Standart iki ayrıntı daha ekler. Giriş yapmışsanız 403, hesabınızın bu sayfa için yetmediği anlamına gelir ve isteği tekrarlamak sonucu değiştirmez. Bir sayfanın var olduğunu bile gizlemek isteyen sunucu ise 403 yerine 404 Not Found döndürebilir.
401, 403 ve 404 arasındaki fark nedir?
| Kod | Adı | Sunucu ne diyor? | Genelde ne işe yarar? |
|---|---|---|---|
401 | Unauthorized | "Kim olduğunuzu bilmiyorum" | Giriş yapmak ya da geçerli kimlik bilgisi göndermek |
403 | Forbidden | "Biliyorum, cevabım hayır" | Başka bir hesap, başka bir ağ ya da sitenin izni |
404 | Not Found | "Burada bir şey yok" ya da "söylemem" | Adresi kontrol etmek |
401 cevabı, tarayıcıya nasıl giriş yapılacağını söyleyen bir başlıkla gelmek zorundadır. 403 böyle bir ipucu taşımaz; bu yüzden yeniden giriş yapmak, yalnız 403 oturumunuzun düşmesinden kaynaklanıyorsa işe yarar. 407 ise 401'in proxy'deki karşılığıdır: kullanıcı adı ve şifre isteyen site değil, sizin proxy'nizdir.
403 hatası adım adım nasıl oluşur?
İstek birkaç denetim noktasından geçer ve bunların her biri isteği geri çevirebilir:
- Ön kapı. Bir CDN (siteyi dünyanın birçok noktasından sunan sunucu ağı) ya da bir güvenlik duvarı IP adresinize, ülkenize, istek hızınıza ve isteğin kendisine bakar.
- Web sunucusunun kuralları. nginx, Apache ya da bir yük dengeleyici izin verilen ve engellenen adresleri ve
.htaccesskurallarını uygular. - Dosyalar. Sunucunun dosyayı okuma izni olmalıdır; içinde başlangıç sayfası olmayan bir klasör listelenmez, reddedilir.
- Uygulama. Sitenin kendi kodu giriş yapıp yapmadığınıza ve sayfayı görmeye yetkiniz olup olmadığına bakar.
- Ret. "Hayır" diyen ilk denetim noktası 403 ile cevap verir. Kimin hayır dediği, sorunu kimin çözebileceğini belirler.
403 sayfası nasıl görünür, kim gönderir?
Sayfanın görünüşü, sizi hangi denetim noktasının geri çevirdiğini söyler.
| Ne görürsünüz? | Kim gönderir? | Genelde nedeni ne? |
|---|---|---|
| "403 Forbidden", altında "nginx" | Sitenin web sunucusu nginx | Dosya izni, eksik başlangıç sayfası ya da bir erişim kuralı |
| "403 Forbidden", altında "openresty" | nginx'in bir sürümü olan OpenResty | nginx ile aynı |
| "Forbidden", "You don't have permission to access this resource." | Apache | Dosya izni, .htaccess kuralı ya da başlangıç sayfası olmayan bir klasör |
| "403 Forbidden", "Request forbidden by administrative rules." | Bir yük dengeleyici olan HAProxy | Yük dengeleyicideki bir erişim kuralı |
| "403 Forbidden", "Microsoft-Azure-Application-Gateway/v2" | Azure Application Gateway'in güvenlik duvarı | İsteğiniz bir güvenlik kuralına takıldı |
| "Sorry, you have been blocked", bir Ray ID | Cloudflare | Sitenin koyduğu bir güvenlik kuralı |
| "… ana makinesine erişim reddedildi", "Bu sayfayı görüntüleme yetkiniz yok.", "HTTP ERROR 403" | Chrome ya da Edge | Site, kendi sayfası olmayan bir 403 gönderdi |
Son satırda konuşan site değil, tarayıcıdır: sayfasız bir 403 geldiğinde Chrome ve Edge ekranı kendi metinleriyle doldurur ve bu metin nedene dair hiçbir şey söylemez. Cloudflare sayfasındaki Ray ID'nin ne olduğunu ve siteye ne göndermeniz gerektiğini Sorry, You Have Been Blocked Hatası Nedir? yazısında anlattık.
Neden 403 hatası alıyorum?
Ziyaretçi açısından başlıca nedenler şunlardır:
- Adres bir klasörü ya da erişime kapalı bir dosyayı gösteriyordur, örneğin başlangıç sayfası olmayan bir klasörü ya da bir yedek dosyasını.
- Giriş yapmamışsınızdır ya da oturumunuz sona ermiştir. Sitenin sizi hatırlamak için tarayıcınızda tuttuğu küçük dosyanın, yani çerezin süresi dolmuş ya da çerez bozulmuş olabilir.
- Hesabınızın yetkisi yetmiyordur, örneğin paylaşılan bir belge ya da bir yönetim sayfası için.
- IP adresinize ya da ülkenize izin verilmiyordur. Bazı kamu, banka ve şirket siteleri yalnız belirli ülkelerden ya da ağlardan gelen ziyaretçileri kabul eder; bazıları da kötüye kullanımdan sonra bütün bir adres aralığını engeller.
- VPN adresinizin itibarı düşüktür. Aynı VPN adresini çok sayıda kişi paylaşır; bunlardan bazıları kötü davrandıysa güvenlik sistemleri o adresin arkasındaki herkesi geri çevirebilir.
- İstek bir güvenlik filtresine takılmıştır. Web uygulama güvenlik duvarı (WAF), her isteği saldırıları durdurmak için yazılmış kurallarla karşılaştırır;
',--ya da<script>gibi karakterler içeren bir arama terimi saldırıya benzeyebilir. Bu filtrelerin nasıl karar verdiğini WAF (Web Uygulama Güvenlik Duvarı) Nedir? yazısında anlattık. - Bir uzantı isteği değiştirmiştir, örneğin istek başlıklarını yeniden yazarak ya da betikleri engelleyerek.
- Çok fazla istek göndermişsinizdir. Bazı siteler kısa sürede gelen çok sayıda isteğe, beklenen 429 Too Many Requests yerine 403 ile cevap verir.
Ziyaretçi olarak 403 hatası nasıl çözülür?
Adımları sırayla deneyin; ilkleri birkaç saniye sürer.
- Adresi kontrol edin. Yazım hatası olup olmadığına bakın, sonra sayfaya sitenin kendi menüsünden ulaşmayı deneyin.
- Sayfayı bir kez yenileyin. F5'e ya da Chrome'un hata sayfasındaki Yeniden Yükle düğmesine basın. Tarayıcılar, site izin vermedikçe bir 403 cevabını saklayıp yeniden kullanmaz; bu yüzden yenileme, sunucuya gerçekten yeniden sorar. Bir şey değişmiyorsa durun: onlarca kez yenilemek bir hız kuralına takılmanıza yol açabilir.
- Yeniden giriş yapın. Çıkış yapıp tekrar girin, sonra sayfayı sitenin ana sayfasından açın.
- O sitenin çerezlerini silin. Chrome'da Diğer > Ayarlar > Gizlilik ve güvenlik > Üçüncü taraf çerezleri > Tüm site verilerini ve izinlerini göster yolunu izleyin, siteyi aratın ve Sil'i seçin (Google'ın adımları). Bu işlem yalnız o sitedeki oturumunuzu kapatır.
- Gizli pencerede deneyin. Chrome'da Diğer > Yeni Gizli pencere yolunu izleyin ya da Ctrl+Shift+N tuşlarına basın. Gizli pencere sitenin çerezleri olmadan açılır; uzantılar da siz izin vermedikçe orada çalışmaz. Sayfa açılıyorsa sorun bir çerezden ya da bir uzantıdan kaynaklanıyordur; hangisi olduğunu bulmak için uzantıları Diğer > Uzantılar > Uzantıları yönet bölümünden tek tek kapatın.
- VPN'i ya da proxy'yi kapatın veya ağ değiştirin. VPN bağlantısını kesip sayfayı yenileyin ya da telefonunuzdan mobil veriyle deneyin. Böyle açılıyorsa site o VPN'in adreslerini kabul etmiyordur.
- Siteye yazın. Tam adresi, saati, ne yaptığınızı ve sayfadaki referans kodunu (Ray ID ya da olay numarası gibi) gönderin.
Sitenin bilerek koyduğu bir 403'ü aşmanın dürüst bir yolu yoktur. Bir hizmet yalnız kendi ülkesinden gelen ziyaretçileri kabul ediyorsa sitenin sunduğu yolu kullanın: bir hesap, resmî uygulama ya da destek ekibi.
Site sizinse: nedeni nasıl bulursunuz?
İşe cevabı kimin verdiğini bularak başlayın. Cloudflare'in 403 hatası notları bunu açıkça söyler: Cloudflare markası taşımayan bir 403 sizin sunucunuzdan gelmiştir ve çoğu zaman bir izin kuralının, mod_security gibi bir güvenlik duvarı modülünün ya da IP engelleme kuralının sonucudur. Cloudflare markalı bir 403 ise Cloudflare ayarlarınızdaki bir güvenlik özelliğinden gelir. Aynı ayrım, sitenin önündeki her CDN ve güvenlik duvarı için geçerlidir.
Kendi sunucunuzda nedeni hata kaydı (error log) söyler. Kayıtta 403'ün çıktığı dakikayı arayın:
| Kayıt satırı | Sunucu | Ne anlatır? |
|---|---|---|
directory index of "/var/www/html/" is forbidden | nginx | Başlangıç sayfası olmayan bir klasör; listeleme kapalı |
open() "/var/www/html/index.html" failed (13: Permission denied) | nginx | Sunucunun kullanıcısı dosyayı okuyamıyor |
access forbidden by rule | nginx | Bir allow ya da deny kuralı eşleşti |
AH01276: Cannot serve directory …: No matching DirectoryIndex … | Apache | Başlangıç sayfası olmayan bir klasör; Indexes kapalı |
AH01630: client denied by server configuration | Apache | Ayarlardaki ya da .htaccess içindeki bir Require kuralı |
Neleri düzeltmelisiniz?
- İzinler. Web sunucusunun kullanıcısı dosyayı okuyabilmeli ve üstündeki her klasöre girebilmelidir. WordPress'in kendi rehberi klasörler için 755 ya da 750, dosyalar için 644 ya da 640 önerir. Hatayı susturmak için 777 vermeyin: bu, sunucudaki her hesabın dosyayı değiştirebilmesi demektir.
- Eksik başlangıç sayfası. Klasöre bir
index.htmlya daindex.phpekleyin. Dizin listelemeyi açmak (autoindex on,Options +Indexes) 403'ü kaldırır, ama klasördeki her dosyayı herkese gösterir. - Erişim kuralları.
deny,Requireve.htaccesssatırlarına bakın; özellikle siteyi yeni bir sunucuya taşıdıktan ya da yeni bir güvenlik eklentisi kurduktan sonra. Site bir CDN'in arkasındaysa hiçbir kuralın CDN'in kendi adreslerini engellemediğinden emin olun. - Hotlink koruması. Başka sitelerin görsellerinizi kendi sayfalarına gömmesini engelleyen kurallar, isteğin hangi sayfadan geldiğini söyleyen Referer başlığına bakar. Tarayıcılar bu başlığı her zaman göndermez; başlıksız isteklere izin verin.
- Güvenlik duvarı. Cloudflare'de sitenin güvenlik bölümündeki Analytics (analiz) sayfasını açın, Events (olaylar) sekmesini seçin ve ziyaretçinin IP adresine göre filtreleyin; örnek kayıtlar, uygulanan işlemi ve hangi özelliğin devreye girdiğini gösterir. Azure Application Gateway'in WAF'ı Prevention (önleme) modunda çalışıyorsa ağ geçidi 403 döndürür; Microsoft'un sorun giderme rehberi, kayıtlarda kural numarasının nasıl bulunacağını ve WAF'ı kapatmak yerine dar bir istisnanın nasıl ekleneceğini gösterir.
Kurallarınız ülkeye göre çalışıyorsa o ülkedeki bir Residential Proxy çıkışı, oradaki bir ziyaretçinin gördüğü sayfayı size birebir gösterir.
Kodunuzda 403 görürseniz
Bir betikte 403 sayfa olarak değil, durum kodu olarak gelir ve cevabın gövdesi çoğu zaman tarayıcının gösterdiğinden fazlasını söyler. Önce onu okuyun. Başlıca nedenler:
- Eksik, süresi dolmuş ya da yanlış anahtar. Hangi durumda 401, hangisinde 403 döndürüleceği API'den API'ye değişir. Amazon API Gateway geçersiz bir API anahtarına, süresi dolmuş bir token'a ve API'de olmayan bir yönteme ya da yola 403 ile cevap verir; sonuncusunun mesajı "Missing Authentication Token" olduğu için birçok kişiyi yanıltır.
- Geçerli ama yetkisiz anahtar. Token, bu uç noktanın istediği yetkiyi (scope) taşımıyordur; aynı token'ı yeniden göndermek işe yaramaz.
- CSRF koruması. Framework'ler, başka bir sitenin, oturum açmış kullanıcının adına form göndermesini (siteler arası istek sahteciliği, CSRF) önlemek için, formla birlikte verilen güvenlik kodunu (CSRF token) taşımayan gönderimleri reddeder. Django bu durumda "CSRF verification failed. Request aborted." mesajıyla 403 döndürür.
- Hız ve bot kuralları. GitHub'ın API'si hız sınırını aştığınızda 403 ya da 429 döndürür; başlıklarda da
x-ratelimit-remaining: 0görünür. Bir sitenin güvenlik duvarı da otomatik görünen trafiğe aynısını yapabilir.
403 bir hız ya da bot kuralından geliyorsa sitenin kabul ettiği bir ziyaretçi gibi davranın: yavaşlayın, aracınızın adını ve bir iletişim adresini taşıyan bir User-Agent gönderin, robots.txt'ye uyun, varsa resmî API'yi kullanın ve daha fazlasına ihtiyacınız varsa siteden izin isteyin. Bir tarayıcının başlıklarını kopyalamak ya da bir istek geçene kadar IP adresi değiştirmek, sitenin kararına karşı çalışmaktır; çözüm değildir. Hangi kodlarda yeniden deneneceğini, hangilerinde durulacağını Scraping'de HTTP Hata Kodları yazısında topladık.
403 proxy'den mi geldi, siteden mi?
Bir proxy kullanıyorsanız 403 diyebilecek iki sunucu vardır. https:// ile başlayan bir adres için istemci önce proxy'den CONNECT isteğiyle bir tünel açmasını ister. Proxy bunu reddederse (örneğin kuralları o porta izin vermiyorsa) site sizi hiç görmemiştir. Tünel açılır da site reddederse 403 tünelin içinden, sitenin kendi başlıklarıyla gelir.
Python'un Requests kütüphanesi reddedilen tünel için içinde Tunnel connection failed: 403 Forbidden geçen bir ProxyError verir, sitenin 403'ünü ise sıradan bir cevap olarak döndürür. Şu betik ikisini ayırır:
import requests
PROXY = "http://user:pass@pr.proxynet.io:8000"
PROXIES = {"http": PROXY, "https": PROXY}
def who_sent_403(url):
try:
r = requests.get(url, proxies=PROXIES, timeout=20)
except requests.exceptions.ProxyError as err:
if "Tunnel connection failed: 403" in str(err):
return "the PROXY refused the tunnel; the site never saw the request"
raise
if r.status_code == 403:
return f"the SITE answered 403 (Server: {r.headers.get('Server', 'not sent')})"
return f"no 403, status {r.status_code}"
for url in ["https://httpbin.org/status/403", "https://httpbin.org:8443/"]:
print(url, "->", who_sent_403(url))Betiği kendi bilgisayarımızda (Python 3.13, Requests 2.34), birçok şirket proxy'si gibi yalnız 443 numaralı porta tünel açan yerel bir test proxy'si üzerinden çalıştırdık. İlk adres, her zaman 403 dönen herkese açık bir test sayfasıdır:
https://httpbin.org/status/403 -> the SITE answered 403 (Server: gunicorn/19.9.0)
https://httpbin.org:8443/ -> the PROXY refused the tunnel; the site never saw the requesthttp:// ile başlayan adreslerde tünel kurulmaz; iki tür 403 de sıradan cevap olarak gelir ve onları Server başlığı ile sayfanın kendisi ayırır. Bir site crawler'ınızın (otomatik tarama programınızın) girmesine izin verirse, izin listesine yazacağı adreslerin değişmemesi gerekir; ISP Proxy size tam olarak bunu, sabit kalan özel IP'leri verir.
403 hatasıyla nerelerde karşılaşırsınız?
- Yurt dışından ya da VPN ile açılan kamu, vergi ve banka portallarında.
- Hesabınızın yetkili olmadığı paylaşılan belgelerde ve yönetim alanlarında.
- Başka bir uygulamanın içindeki tarayıcıda Google hesabınızla giriş yapmaya çalıştığınızda.
- Hotlink koruması olan bir siteden gömülen görsellerde.
- Hız sınırı aşıldıktan sonra API'lerde; güvenlik duvarının bot saydığı fiyat takip araçlarında ve SEO crawler'larında.
Sık yapılan hatalar
- Tarayıcı önbelleğini tekrar tekrar temizlemek. Önemli olan yalnız o sitenin çerezleridir.
- Sitenin çöktüğünü sanmak. 403, sunucunun ayakta olduğunu ve bu isteği reddettiğini gösterir.
- Site sahipleri: hatayı yok etmek için 777 izni vermek ya da dizin listelemeyi açmak.
- Site sahipleri: CDN'in adreslerini bir güvenlik duvarı kuralıyla ya da güvenlik eklentisiyle engellemek.
- Geliştiriciler: 403 alan isteği beklemeden, art arda yeniden denemek. Ret değişmez ve her deneme hız sayacına eklenir.
Karar rehberi
| Durumunuz | Ne yapmalısınız? |
|---|---|
| Tek bir adreste düz bir "403 Forbidden" sayfası | Adresi kontrol edin, sitenin menüsünü kullanın |
| Dün giriş yapmışken açılıyordu | Yeniden giriş yapın, o sitenin çerezlerini silin |
| Gizli pencerede açılıyor | Soruna yol açan çerezi ya da uzantıyı kaldırın |
| Sayfada bir Ray ID ya da olay numarası var | Saatle birlikte siteye gönderin |
| Sitenizin kaydında "Permission denied" yazıyor | Dosya ve klasör izinlerini düzeltin |
| Betiğiniz "Tunnel connection failed: 403" hatası alıyor | Proxy reddetti; portu ve hedefi kontrol edin |
| Betiğiniz sitenin 403'ünü alıyor | Gövdeyi okuyun, yavaşlayın, resmî API'yi kullanın |
Sıkça sorulan sorular
403 Forbidden hatası benden mi kaynaklanıyor?
Bazen. Süresi dolmuş bir oturumdan, bir çerezden, bir uzantıdan ya da VPN'inizden kaynaklanan sorunu kendiniz çözebilirsiniz. Site ülkenizi, ağınızı ya da hesabınızı bilerek reddediyorsa bunu yalnız site değiştirebilir.
VPN 403 hatasına yol açar mı?
Evet, hem de sık. Bir VPN adresini çok sayıda kullanıcı paylaşır; bazı siteler bu adresleri doğrudan ya da aynı aralıktan gelen kötüye kullanımdan sonra reddeder. Sayfa VPN kapalıyken açılıyorsa site VPN'in adresini kabul etmiyordur.
Neden telefonda 403 alıyorum da bilgisayarda almıyorum?
Telefon çoğu zaman mobil veriyle, yani başka bir IP adresiyle bağlanır; VPN uygulaması cihazlardan yalnız birinde açık olabilir ve her tarayıcı kendi çerezlerini tutar. Telefonu bilgisayarla aynı Wi-Fi ağına bağlayıp deneyin, sonra telefonun tarayıcısında sitenin verilerini silin.
Google ile girişte "403 disallowed_useragent" ne demek?
Google, bir uygulamanın içine gömülü web görünümünde (WebView) yapılan girişleri reddeder; çünkü o görünümü barındıran uygulama, sizinle Google arasında gidip gelen bilgiyi okuyabilir ya da değiştirebilir. Normal tarayıcınızdan giriş yapın ya da uygulamanın geliştiricisinden sorunu düzeltmesini isteyin.
403 engeli ne kadar sürer?
İzin ya da ülke kuralı, biri onu değiştirene kadar sürer. Hız ve bot kuralları genellikle birkaç dakika ya da birkaç saat sonra kendiliğinden kalkar; bazı API'ler süreyi Retry-After ya da x-ratelimit-reset başlığında bildirir.
403 hatası sitenin Google sıralamasına zarar verir mi?
Herkese açık sayfalarda evet. Google, 4xx koduyla cevap veren sayfaları dizine eklemez, dizindekileri de çıkarır. Site sahiplerinden botunu yavaşlatmak için 403 kullanmamalarını da ister: 429 dışındaki 4xx kodları tarama hızını değiştirmez.
Özet
403 Forbidden, sunucunun isteğinizi anladığını ve karşılamamaya karar verdiğini gösterir. Ziyaretçiyseniz adresi kontrol edin, yeniden giriş yapın, sitenin çerezlerini silin, gizli pencerede deneyin ve VPN'i kapatın; sayfa yine açılmıyorsa siteye yazın. Site sahibiyseniz önce cevabı kimin verdiğini bulun, sonra hata kaydını okuyun. Kodunuzda gövdeyi okuyun ve proxy'nizin 403'ünü sitenin 403'ünden ayırın. Sitelerin kabul ettiği izleme ve veri toplama işleri için proxy türlerini proxy sayfamızda karşılaştırabilirsiniz.




