Güvenlik üstbilgileri hızlı başvuru

Sitenizi güvende tutabilecek başlıklar hakkında daha fazla bilgi edinin ve en önemli ayrıntıları hızlıca arayın.

Bu makalede, web sitenizi korumak için kullanabileceğiniz en önemli güvenlik başlıkları listelenmektedir. Web tabanlı güvenlik özelliklerini anlamak, bunları web sitenizde nasıl uygulayacağınızı öğrenmek ve hatırlatmaya ihtiyaç duyduğunuzda referans olarak kullanın.

Hassas kullanıcı verilerini işleyen web siteleri için önerilen güvenlik başlıkları:
İçerik Güvenliği Politikası (İGP)
Güvenilir Türler
Tüm web siteleri için önerilen güvenlik üstbilgileri:
X-Content-Type-Options
X-Frame-Options
Cross-Origin Resource Policy (CORP)
Cross-Origin Opener Policy (COOP)
HTTP Strict Transport Security (HSTS)
Gelişmiş özelliklere sahip web siteleri için güvenlik başlıkları:
Merkezler Arası Kaynak Paylaşımı (CORS)
Çapraz Kaynak Yerleştirme Politikası (COEP)
Web'deki bilinen tehditler
Güvenlik başlıklarına geçmeden önce web'deki bilinen tehditler ve bu güvenlik başlıklarını neden kullanmak isteyeceğiniz hakkında bilgi edinin.

Güvenlik başlıklarına geçmeden önce web'deki bilinen tehditler ve bu güvenlik başlıklarını neden kullanmak isteyeceğiniz hakkında bilgi edinin.

Sitenizi ekleme güvenlik açıklarından koruma

Enjeksiyon güvenlik açıkları, uygulamanız tarafından işlenen güvenilmeyen veriler uygulamanızın davranışını etkileyebildiğinde ve genellikle saldırgan tarafından kontrol edilen komut dosyalarının yürütülmesine yol açtığında ortaya çıkar. Yerleştirme hatalarından kaynaklanan en yaygın güvenlik açığı, yansıtılan XSS, depolanan XSS, DOM tabanlı XSS ve diğer varyantlar dahil olmak üzere çeşitli biçimlerdeki siteler arası komut dosyası çalıştırmadır (XSS).

Bir XSS güvenlik açığı, genellikle saldırgana uygulama tarafından işlenen kullanıcı verilerine ve aynı web kaynağında barındırılan diğer tüm bilgilere tam erişim sağlayabilir.

Geleneksel enjeksiyon savunmaları arasında HTML şablon sistemlerinde otomatik kaçışın tutarlı bir şekilde kullanılması, tehlikeli JavaScript API'lerinin kullanılmaması, dosya yüklemelerinin ayrı bir alanda barındırılması ve kullanıcı tarafından kontrol edilen HTML'nin temizlenmesi yoluyla kullanıcı verilerinin uygun şekilde işlenmesi yer alır.

  • Enjeksiyon riskini azaltmak için uygulamanız tarafından hangi komut dosyalarının yürütülebileceğini kontrol etmek üzere İçerik Güvenliği Politikası (İGP)'ni kullanın.
  • Tehlikeli JavaScript API'lerine iletilen verilerin temizlenmesini zorunlu kılmak için Trusted Types'ı kullanın.
  • Tarayıcının, web sitenizin kaynaklarının MIME türlerini yanlış yorumlamasını önlemek için X-Content-Type-Options'ı kullanın. Bu durum, komut dosyası yürütülmesine neden olabilir.

Sitenizi diğer web sitelerinden izole etme

Web'in açık olması, web sitelerinin bir uygulamanın güvenlik beklentilerini ihlal edebilecek şekilde etkileşime girmesine olanak tanır. Bu durum, beklenmedik şekilde kimliği doğrulanmış istekler göndermeyi veya başka bir uygulamadan gelen verileri saldırganın dokümanına yerleştirmeyi içerir. Bu sayede saldırgan, uygulama verilerini değiştirebilir veya okuyabilir.

Web yalıtımını zayıflatan yaygın güvenlik açıkları arasında tıklama hırsızlığı, siteler arası istek sahteciliği (CSRF), siteler arası komut dosyası ekleme (XSSI) ve çeşitli siteler arası sızıntılar yer alır.

Bu başlıklarla ilgileniyorsanız Post-Spectre Web Development adlı makaleyi okuyabilirsiniz.

Güçlü bir web sitesini güvenli bir şekilde oluşturun

Spectre, aynı göz atma bağlamı grubuna yüklenen tüm verileri aynı kaynak politikasına rağmen okunabilir hale getirebilir. Tarayıcılar, "kaynaklar arası izolasyon" adı verilen özel bir ortamın arkasındaki güvenlik açığından yararlanabilecek özellikleri kısıtlar. Kökler arası erişime kapalı web siteleri ile SharedArrayBuffer gibi güçlü özellikleri kullanabilirsiniz.

Sitenize gelen trafiği şifreleme

Şifreleme sorunları, bir uygulama aktarım halindeki verileri tam olarak şifrelemediğinde ortaya çıkar. Bu durumda, dinleme saldırısı yapanlar kullanıcının uygulamayla etkileşimleri hakkında bilgi edinebilir.

Yetersiz şifreleme aşağıdaki durumlarda ortaya çıkabilir: HTTPS kullanılmaması, karma içerik, Secure özelliği (veya __Secure önek) olmadan çerez ayarlanması ya da gevşek CORS doğrulama mantığı.

İçerik Güvenliği Politikası (İGP)

Siteler arası komut dosyası çalıştırma (XSS), bir web sitesindeki güvenlik açığının kötü amaçlı bir komut dosyasının yerleştirilmesine ve yürütülmesine izin verdiği bir saldırıdır.

Content-Security-Policy, sayfa tarafından yürütülebilecek komut dosyalarını kısıtlayarak XSS saldırılarını azaltmak için ek bir katman sağlar.

Aşağıdaki yaklaşımlardan birini kullanarak katı CSP'yi etkinleştirmeniz önerilir:

  • HTML sayfalarınızı sunucuda oluşturuyorsanız nonce tabanlı katı bir CSP kullanın.
  • HTML'nizin statik olarak sunulması veya önbelleğe alınması gerekiyorsa (ör. tek sayfalık bir uygulama ise) karma tabanlı katı bir CSP kullanın.

Örnek kullanım: nonce tabanlı bir İGP

Content-Security-Policy:
  script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline';
  object-src 'none';
  base-uri 'none';
CSP nasıl kullanılır?

1. Nonce tabanlı katı bir CSP kullanın {: #nonce-based-csp}

HTML sayfalarınızı sunucuda oluşturuyorsanız nonce tabanlı katı bir CSP kullanın.

Sunucu tarafında her istek için yeni bir komut dosyası nonce değeri oluşturun ve aşağıdaki başlığı ayarlayın:

sunucu yapılandırma dosyası

Content-Security-Policy:
  script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline';
  object-src 'none';
  base-uri 'none';

HTML'de komut dosyalarını yüklemek için tüm <script> etiketlerinin nonce özelliğini aynı {RANDOM1} dizesine ayarlayın.

index.html

<script nonce="{RANDOM1}" src="https://example.com/script1.js"></script>
<script nonce="{RANDOM1}">
  // Inline scripts can be used with the <code>nonce</code> attribute.
</script>

Google Fotoğraflar, nonce tabanlı katı İGP'ye iyi bir örnektir. Nasıl kullanıldığını görmek için Geliştirici Araçları'nı kullanın.

2. Karma tabanlı katı bir İGP kullanın {: #hash-based-csp}

HTML'nizin statik olarak sunulması veya önbelleğe alınması gerekiyorsa (örneğin, tek sayfalık bir uygulama oluşturuyorsanız) karma tabanlı katı bir CSP kullanın.

sunucu yapılandırma dosyası

Content-Security-Policy:
  script-src 'sha256-{HASH1}' 'sha256-{HASH2}' 'strict-dynamic' https: 'unsafe-inline';
  object-src 'none';
  base-uri 'none';

HTML'de, karma tabanlı bir politika uygulamak için komut dosyalarınızı satır içi yapmanız gerekir. Bunun nedeni, çoğu tarayıcının harici komut dosyalarını karma oluşturma işlemini desteklememesidir.

index.html

<script>
...// your script1, inlined
</script>
<script>
...// your script2, inlined
</script>

Harici komut dosyalarını yüklemek için B seçeneği: karma tabanlı İGP yanıt başlığı bölümündeki "Kaynaklı komut dosyalarını dinamik olarak yükleme" başlıklı makaleyi inceleyin.

CSP Evaluator, İGP'nizi değerlendirmek için iyi bir araçtır. Aynı zamanda, tek seferlik şifre tabanlı katı İGP için de iyi bir örnektir. Nasıl kullanıldığını görmek için Geliştirici Araçları'nı kullanın.

Desteklenen tarayıcılar

CSP hakkında dikkat edilmesi gereken diğer noktalar

Daha fazla bilgi

Güvenilir Türler

DOM tabanlı XSS, eval() veya .innerHTML gibi dinamik kod yürütmeyi destekleyen bir alıcıya kötü amaçlı verilerin iletildiği bir saldırıdır.

Trusted Types, DOM XSS'den arındırılmış uygulamalar yazmak, güvenlik incelemesi yapmak ve bu uygulamaları sürdürmek için araçlar sağlar. CSP aracılığıyla etkinleştirilebilirler ve tehlikeli web API'lerinin yalnızca özel bir nesneyi (güvenilir tür) kabul etmesini sağlayarak JavaScript kodunu varsayılan olarak güvenli hale getirirler.

Bu nesneleri oluşturmak için güvenlik politikaları tanımlayabilirsiniz. Bu politikalarda, veriler DOM'a yazılmadan önce güvenlik kurallarının (ör. kaçış veya temizleme) tutarlı bir şekilde uygulandığından emin olabilirsiniz. Bu politikalar, kodda DOM XSS'ye neden olabilecek tek yerlerdir.

Kullanım örnekleri

Content-Security-Policy: require-trusted-types-for 'script'
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
  // Name and create a policy
  const policy = trustedTypes.createPolicy('escapePolicy', {
    createHTML: str => {