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
X-Content-Type-Options: nosniff yanıt başlığı, tarayıcının sunucunun gönderdiği Content-Type değerini tahmin ederek farklı bir içerik türüyle yorumlamasını önler. En önemli etkisi, yanlış MIME türüyle sunulan JavaScript veya CSS dosyalarının tarayıcı tarafından çalıştırılmasını ya da stil dosyası olarak uygulanmasını engellemektir. Böylece hatalı yapılandırma ve bazı içerik türü karıştırma saldırıları için tarayıcı tarafında ek bir sınır oluşturur.

Bu başlık dosyanın güvenli olduğunu kanıtlamaz, zararlı kodu temizlemez ve tek başına XSS açığını kapatmaz. Sunucu yine doğru Content-Type göndermelidir. Örneğin JavaScript dosyası JavaScript MIME türüyle, CSS dosyası CSS MIME türüyle sunulmalıdır.

Nasıl çalışır?​


Bir tarayıcı /assets/app.js isteğine yanıt aldığında, yanıt başlığındaki Content-Type değerini dikkate alır. Değer dosyanın gerçek içeriğiyle uyumsuzsa, nosniff tarayıcının içeriği inceleyip başka bir tür olarak kabul etmesine izin vermez. Bunun sonucu, özellikle script ve style bağlamlarında içeriğin reddedilmesi olabilir.

Örneğin sunucu, JavaScript dosyasını text/plain olarak gönderiyorsa dosyayı rastgele JavaScript kabul ettirmeye çalışmak yerine MIME türü hatasını düzeltmek gerekir. Başlık eklendiğinde uygulama çalışmayı bırakıyorsa bu genellikle güvenlik başlığının bozuk yapılandırmayı görünür hale getirdiği anlamına gelir; başlığı kaldırmak yerine yanıt türünü düzeltmek doğru adımdır.

Bu başlık özellikle script/style hedeflerinde beklenen MIME türüne göre engelleme sağlar; sayfa navigasyonunda da belirtilen türün esas alınmasına yardımcı olur. text/plain sunulan yükleme HTML gibi tahmin edilmemelidir. Ancak zararlı HTML zaten text/html ile güvenilir kökende sunuluyorsa nosniff onu temizlemez; özel indirme/ayrı origin/Content-Disposition ihtiyacı ayrıca değerlendirilir.

Uygulama ve kontrol​


Sunucunuzun yapılandırma yöntemine göre aşağıdaki en küçük örneklerden uygun olanını kullanın. Aynı yanıt için başlığın birden fazla kez eklenmediğinden emin olun.

  1. Tüm HTTP yanıtlarında şu başlığın gönderilmesini sağlayın: X-Content-Type-Options: nosniff.
  2. Statik dosyalar için gerçek içerik türlerini düzeltin; JavaScript, CSS, görsel ve belge yanıtlarının Content-Type değerlerini dosyanın kullanımına uygun hale getirin.
  3. Yapılandırmayı kaydedip ilgili alan adından bir yanıt kontrol edin. Örnek kontrol komutu:
    Kod:
    curl -I https://example.com/assets/app.js
  4. Çıktıda X-Content-Type-Options: nosniff satırını ve beklenen Content-Type değerini arayın. Başlık yoksa istek başka bir proxy, CDN veya uygulama katmanından dönüyor olabilir; her katmanı ayrı kontrol edin.
  5. Tarayıcı geliştirici araçlarında engellenen kaynakları inceleyin. Bir script veya stil dosyası MIME türü nedeniyle reddediliyorsa ilgili yanıtın türünü düzeltin ve yeniden deneyin.

Apache için temel yapılandırma örneği şöyledir:
Kod:
Header always set X-Content-Type-Options "nosniff"

Nginx kullanan sistemlerde karşılığı şöyledir:
Kod:
add_header X-Content-Type-Options "nosniff" always;

Apache örneği mod_headers gerektirir; .htaccess kullanılıyorsa ilgili override izni gerekir. Nginx add_header mirası alt location’da başka add_header tanımlanmasıyla değişebilir; kurulu sürümün miras davranışını kontrol edin. Her ikisinde de gerçek HTML, JS, CSS ve hata yanıtını ayrı doğrulayın. Yapılandırma değişikliğinden sonra sunucunun kabul ettiği sözdizimiyle doğrulama yapmadan yeniden yükleme gerçekleştirmeyin.

Aşağıdaki ayrım, başlığın neyi çözdüğünü ve neyi çözmediğini gösterir:

Konunosniff etkisiDoğru yaklaşım
Yanlış MIME türüyle JavaScriptTarayıcının içeriği script olarak tahmin etmesini engelleyebilirDoğru Content-Type gönderin
Yanlış MIME türüyle CSSStil dosyasının uygulanması reddedilebilirCSS yanıtını doğru türle sunun
Zararlı dosya veya XSS koduİçeriği temizlemez ve açığı tek başına kapatmazGirdi doğrulama, çıktı kodlama ve erişim kontrollerini ayrıca uygulayın

Başlığın görünmesi başarıyla eklendiğini gösterir; ancak uygulamanın tüm kaynaklarının doğru MIME türleriyle çalıştığını göstermez. Özellikle CDN, önbellek, ters proxy ve dosya indirme uç noktalarında ayrı yanıt kontrolü yapın. Beklenmedik bir engelleme varsa ilk inceleme noktası, engellenen yanıtın gerçek Content-Type değeridir.

curl -I HEAD ister; uygulama HEAD/GET’i farklı işliyorsa asıl GET yanıtını da kontrol edin (örneğin curl -sS -D - -o /dev/null URL). Bu komut gövdeyi indirip atar, yalnız başlık isteği değildir. Başlığın mevcut olması gerçek tarayıcıda doğru kaynağın çalıştığını tek başına kanıtlamaz.

Sık yapılan hatalar​


Başlığı yalnızca HTML yanıtına eklemek: Sorun genellikle script, CSS veya indirilebilir dosya yanıtında ortaya çıkar. Başlığın gerekli yanıt türlerinde gerçekten gönderildiğini kontrol edin.

Her şeyi application/octet-stream yapmak: Bu, MIME türü sorununu çözmez; tarayıcıda kaynakların çalışmamasına veya dosyaların beklenmedik biçimde indirilmesine yol açabilir. İçeriğe uygun tür kullanın.

Başlığı güvenlik politikası sanmak: nosniff yalnızca içerik türü yorumlamasını sınırlar. CSP, güvenli çerez ayarları, erişim denetimi ve sunucu güncellemeleri gibi diğer korumaların yerine geçmez.

Kaynaklar​



Sık sorulan sorular​


Bu başlık dosya yükleme güvenliğini sağlar mı?​

Hayır. Yüklenen dosyanın türünü, içeriğini, adını ve çalıştırılabilir olup olmadığını sunucu tarafında ayrıca doğrulamak gerekir. Dosyaları web kökünden ayrı tutmak da mimariye göre gerekli olabilir.

Başlık eklendiğinde mevcut JavaScript çalışmıyorsa kaldırmalı mıyım?​

Genellikle hayır. Önce tarayıcıdaki ağ yanıtını ve Content-Type değerini kontrol edin; çoğu durumda düzeltilmesi gereken nokta kaynak dosyasının sunucu yapılandırmasıdır.
 

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