Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

Ortam dosyalarının webden indirilmesi nasıl engellenir?​


Ortam dosyalarının indirilmesini engellemenin en güvenli yolu, bu dosyaları web sunucusunun yayın kökünün dışına taşımaktır. Dosya web kökünde kalmak zorundaysa web sunucusunda açık bir erişim kuralı tanımlayın ve sonucu gerçek bir HTTP isteğiyle test edin. Yalnızca robots.txt kullanmak, dosyayı gizlemez; bu dosya güvenlik kontrolü değildir.

Önce doğru dosya yerleşimini seçin​


.env, uygulama ayarları, özel anahtarlar, veritabanı yedekleri ve hata günlükleri tarayıcıya sunulmayan bir dizinde tutulmalıdır. Örneğin uygulamanın yayınlanan dosyaları /var/www/example.com/public altındaysa ortam dosyasını /var/www/example.com/.env konumuna koymak, onu yayın kökünün dışına çıkarır. Uygulama bu dosyayı okuyacak kullanıcı ve dosya izinlerine sahip olmalı; web sunucusunun doğrudan dosya sunmasına gerek kalmamalıdır.

Dosyayı taşıyamıyorsanız en azından hassas dosya adlarını web sunucusunda engelleyin. Aşağıdaki kurallar .env ailesini kapsar; .git dizini, yapılandırma kopyaları ve farklı adlı yedeklerin tamamını kapattıkları varsayılmamalıdır. Bunları da yayın paketinin dışında tutun.

Apache için en küçük uygulama​


Apache kullanıyor ve yayın kökünde .htaccess kullanımına izin veriliyorsa, mevcut .htaccess dosyanızı koruyarak aşağıdaki kuralı ekleyin:

Kod:
<FilesMatch "(?i)^\.env(?:\..*)?$">
    Require all denied
</FilesMatch>

  1. .htaccess dosyasını yayın köküne yerleştirin ve Apache yapılandırmasında bu dizin için Require için gerekli AuthConfig override yetkisinin veya uygun dar AllowOverrideList izninin etkin olduğundan emin olun.
  2. Korunması gereken dosya adlarını kurala ekleyin. Örnek desen .env, .env.production ve .env.bak gibi noktayla devam eden adları kapsar. Kendi farklı kopya adlarınızı ayrıca envanterleyin.
  3. Yapılandırmayı yükleyip https://example.com/.env ve bir yedek dosyayı isteyin.

Başarılı sonuç, dosyanın içeriğinin dönmemesi ve sunucunun genellikle 403 veya 404 yanıtı vermesidir. Dosya hâlâ 200 ile dönüyorsa .htaccess okunmuyor olabilir veya istek başka bir proxy, uygulama ya da sanal konfigürasyon tarafından karşılanıyor olabilir.

ÖnlemKoruduğu durumSınırı
Yayın kökü dışına taşımaDosyanın doğrudan HTTP ile sunulmasınıUygulamanın doğru dosya yolunu kullanması gerekir
Web sunucusu erişim kuralıYanlışlıkla yayınlanan bilinen dosya adlarınıYeni veya unutulmuş uzantıları kendiliğinden bulmaz
Dosya izinleriYetkisiz yerel kullanıcı erişiminiUygulama okuyabiliyorsa yanlışlıkla HTTP yanıtına yazmasını kendiliğinden önlemez
Dağıtım temizliğiYedek, günlük ve sürüm kontrol artıklarınıHer dağıtımda tekrarlanmalıdır

Nginx için en küçük uygulama​


Nginx yapılandırmasında ilgili server bloğuna hassas dosya desenlerini engelleyen bir location kuralı eklenebilir:

Kod:
location ~* (^|/)\.env(?:[./]|$) {
    return 404;
}

  1. Kuralları ilgili sitenin server bloğuna ekleyin; başka sitelerin kurallarına yanlışlıkla uygulamayın. Regex location sırası ile exact veya ^~ location önceliklerini inceleyin; bir kuralın dosyada bulunması tek başına bütün isteklerin ona girdiğini kanıtlamaz.
  2. Nginx yapılandırmasını sözdizimi kontrolünden geçirin ve başarılıysa yeniden yükleyin. Sözdizimi kontrolü başarısızsa yeniden yükleme yapmayın; hatalı yapılandırma mevcut hizmeti etkileyebilir.
  3. Dosya adlarını hem doğrudan hem de alt dizin içinden test edin. Örneğin /.env, /.env.production ve /config/.env.bak yollarını kontrol edin. Bu örnekte app.ini veya .git/config için ayrı koruma yoktur; onları yayın kökü dışında tutmak gerekir.

Kullandığınız dağıtım, kontrol paneli veya Nginx eklentisi bu kuralları başka bir dosyadan üretiyorsa, doğrudan üretilen dosyayı değiştirmek yerine panelin kalıcı yapılandırma alanını kullanın. Aksi durumda sonraki yapılandırma üretiminde kural silinebilir.

Hangi önlem neyi çözer?​


Aşağıdaki ayrım, yalnızca tek bir dosya adını engelleyip diğer sızıntıları unutmayı önler.

Kontrol ve sızıntı olduysa yapılacaklar​


Tarayıcı yerine curl -I https://example.com/.env gibi bir başlık isteğiyle başlayın; ardından gövdenin de dönmediğini kontrol edin. 403 veya 404 alınması olumlu bir işarettir, fakat dosyanın geçmişte indirilmediğini kanıtlamaz. Web sunucusu, proxy ve uygulama günlüklerinde bu yolları arayın.

Bir ortam dosyası daha önce erişilebilir olduysa yalnızca erişim kuralı eklemek yeterli değildir. İçindeki veritabanı parolalarını, API anahtarlarını ve imzalama anahtarlarını geçersiz kılıp yenileyin; dosyayı dağıtım paketlerinden ve herkese açık yedeklerden kaldırın. Sonra hem eski dosya adlarını hem de alternatif uzantıları yeniden test edin.

Sık yapılan hatalar​


Sadece uzantıyı engellemek: .env kapatılıp .env.bak, config.old veya database.sql açık bırakılabilir.

Sadece robots.txt'ye güvenmek: Kötü niyetli istemciler bu dosyaya uymak zorunda değildir.

Dosyayı engelleyip sırları değiştirmemek: Dosya bir kez açığa çıktıysa kural eklemek, daha önce ele geçirilmiş kimlik bilgilerini geri almaz.

Uygulama rotasını unutmak: Web sunucusu dosyayı engellese bile uygulama, ayar veya günlük dosyasını kendi endpoint'i üzerinden döndürebilir. Şüpheli indirme yollarını uygulama rotalarında da arayın.

Sık sorulan sorular​


Engellenen dosya için 403 mü, 404 mü kullanılmalı?​


İkisi de içeriğin dönmediği ve uygulamanın normal çalıştığı durumda kullanılabilir. 404 dosyanın varlığı hakkında daha az bilgi verebilir; ancak asıl güvenlik şartı, dosya içeriğinin hiçbir yanıt gövdesinde sunulmamasıdır.

.env indirmesini kapatmak tarayıcı paketine gömülmüş bir sırrı korur mu?​

Hayır. Derleme aracı bir değeri istemci JavaScript’ine yazdıysa .env dosyasının HTTP’den kapalı olması o değeri geri gizlemez. Örneğin Next.js’te NEXT_PUBLIC_ önekiyle istemciye açılan değişkenlere sır koymayın. Sızan anahtarı yenileyip istemci çıktısını da düzeltin.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic