Tüm rehberler
Orta önem derecesiGüvenlik Başlıkları

MIME koklama ve X-Content-Type-Options: nosniff açıklaması

Sunucunuz yanlış Content-Type gönderse bile tarayıcılar, nasıl işleyeceğine karar vermek için bir yanıtın gerçek içeriğini "koklayabilir". X-Content-Type-Options: nosniff başlığı, tarayıcıya bildirilen türe güvenmesini ve dosyaları — yüklenen bir görüntü gibi — çalıştırılabilir betiğe yükseltmeyi reddetmesini söyler.

Nedir

MIME koklama, sunucunun Content-Type başlığı eksik veya içerikle eşleşmediğinde içerik türünü çıkarmak için bir yanıtın ilk baytlarını inceleyen bir tarayıcı buluşsal yöntemidir. Örneğin, <script> ile başlayan text/plain olarak bildirilen bir dosya yeniden sınıflandırılıp HTML olarak çalıştırılabilir.

X-Content-Type-Options tek değerli bir yanıt başlığıdır: X-Content-Type-Options: nosniff. Mevcut olduğunda tarayıcılar, bir yanıtı farklı bir MIME türüne yükseltmeyi reddeder — application/octet-stream olarak sunulan yüklenen bir dosya ikili kalır, asla çalıştırılabilir bir betik veya stil sayfasına dönüşmez.

Neden önemli

Kullanıcı tarafından oluşturulan içerik temel risktir. Uygulamanız dosya yüklemelerine izin veriyorsa ve bunları uygulamayla aynı kaynaktan sunuyorsanız, görüntü kılığına girmiş kötü amaçlı bir HTML dosyası koklandığında kurbanların tarayıcılarında çalıştırılabilir — sunucu tarafında uzantıları doğruluyor olsanız bile dosya yükleme yoluyla depolanmış bir XSS.

nosniff olmadan tarayıcılar, beklenmedik kaynaklardan alınan stil sayfalarını da çalıştırabilir. Betik olarak çalıştırılan bir stil sayfası, diğer yanlış yapılandırmalarla birleştiğinde çapraz kaynak veri sızdırma yolu oluşturur. nosniff, uygulamanızın her içerik sınırını güçlendiren düşük maliyetli küresel bir güvencedir.

Nasıl düzeltilir

Next.js'te başlığı global olarak ekleyin

API rotaları ve statik dosya rotaları dahil tüm yanıtlara uygulanması için next.config.js'de X-Content-Type-Options: nosniff'i ayarlayın.

// next.config.js
module.exports = {
  async headers() {
    return [
      {
        source: "/:path*",
        headers: [
          { key: "X-Content-Type-Options", value: "nosniff" },
        ],
      },
    ];
  },
};
nginx'te yapılandırın

nginx üzerinden proxylenen tüm yanıtlara uygulanması için server bloğuna direktifi ekleyin.

add_header X-Content-Type-Options "nosniff" always;
Her zaman doğru bir Content-Type bildirin

nosniff, her yanıt doğru bir Content-Type başlığı taşıdığında en etkilidir. Kullanıcı yüklü dosyalar için uygun bir türle ve uygulamayla aynı kaynak yerine ayrı bir kaynak ya da depolama etki alanından sunun; böylece bir dosya çalışsa bile kullanıcılarınızın oturum çerezlerine erişemez.

Yüklemeleri yalnızca uzantıya göre değil içeriğe göre doğrulayın

Uzantı kontrolleri atlatılabilir. Dosyanın sihirli baytlarını sunucu tarafında incelemek için file-type (npm) gibi bir kütüphane kullanın ve depolama katmanına ulaşmadan önce izin verilen güvenli türler listesiyle eşleşmeyen her şeyi reddedin.

import { fileTypeFromBuffer } from "file-type";

const ALLOWED = new Set(["image/jpeg", "image/png", "image/webp", "image/gif"]);

async function validateUpload(buffer: Buffer): Promise<void> {
  const type = await fileTypeFromBuffer(buffer);
  if (!type || !ALLOWED.has(type.mime)) {
    throw new Error("Upload rejected: unsupported file type");
  }
}

SSS

AppSafe, eksik X-Content-Type-Options başlığı için hangi önem derecesini raporlar?

Orta. Başlık, düşük sürtünmeli bir sertleştirme önlemidir — bir satır yapılandırma — dolayısıyla atlamak açık bir eksikliktir, ancak aktif sömürü ayrı bir yükleme veya enjeksiyon vektörü gerektirir.

nosniff normal sayfa yüklemelerini etkiler mi?

Pratikte hayır. nosniff yalnızca daha tehlikeli bir türe yükseltmeyi engeller. HTML, CSS ve JavaScript'iniz zaten doğru türlerle sunulduğundan normal yüklenir.

Modern tarayıcılar artık daha akıllı olduğuna göre X-Content-Type-Options hâlâ alakalı mı?

Evet. Koklama davranışı motorlar ve sürümler arasında farklılık gösterir ve bu başlık tek taşınabilir güvencedir. Tüm güncel tarayıcılar (Chrome, Firefox, Safari, Edge) nosniff'e uyar.

Uygulaman etkileniyor mu?

AppSafe, bunu ve onlarca başka sorunu tek bir ücretsiz taramada kontrol eder.

Uygulamamı ücretsiz tara