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)
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.
- Dokümanlarınızın kötü amaçlı bir web sitesi tarafından yerleştirilmesini önlemek için X-Frame-Options'ı kullanın.
- Web sitenizin kaynaklarının merkezler arası bir web sitesine dahil edilmesini önlemek için Merkezler Arası Kaynak Politikası'nı (CORP) kullanın.
- Web sitenizin pencerelerini kötü amaçlı web sitelerinin etkileşimlerinden korumak için Cross-Origin Opener Policy (COOP)'yi kullanın.
- Web sitenizin kaynaklarına merkezler arası dokümanlardan erişimi kontrol etmek için Merkezler Arası Kaynak Paylaşımı (CORS)'yı kullanın.
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.
- Çapraz kaynak izolasyonunu etkinleştirmek için COOP ile birlikte Cross-Origin Embedder Policy (COEP) kullanın.
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ığı.
- İçeriklerinizi tutarlı bir şekilde HTTPS üzerinden sunmak için HTTP Strict Transport Security (HSTS) kullanın.
İç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';
Önerilen kullanımlar
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
frame-ancestorsyönergesi, güvenilmeyen sitelerin sitenizi yerleştirmesine izin vermeniz durumunda ortaya çıkan bir risk olan tıklama korsanlığına karşı sitenizi korur. Daha basit bir çözüm tercih ederseniz yüklenmeyi engellemek içinX-Frame-Optionskullanabilirsiniz. Ancakframe-ancestors, yalnızca belirli kaynakların yerleştiriciler olarak kullanılmasına izin veren gelişmiş bir yapılandırma sunar.- Sitenizin tüm kaynaklarının HTTPS üzerinden yüklendiğinden emin olmak için bir CSP kullanmış olabilirsiniz. Bu durumun önemi azaldı: Günümüzde çoğu tarayıcı karma içerikleri engelliyor.
- Ayrıca yalnızca raporlama modunda bir CSP ayarlayabilirsiniz.
- CSP'yi sunucu tarafında başlık olarak ayarlayamıyorsanız meta etiketi olarak da ayarlayabilirsiniz. Meta etiketler için yalnızca rapor modunu kullanamayacağınızı unutmayın (bu durum değişebilir).
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 => {