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

Sitenizin güvenliğini sağlayabilecek üstbilgilerle ilgili 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 üstbilgileri listelenmektedir. Web tabanlı güvenlik özelliklerini anlamak, bu özellikleri web sitenizde nasıl uygulayacağınızı öğrenmek ve hatırlatmaya ihtiyacınız olduğunda başvuru kaynağı olarak kullanmak için burayı 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ürleri
Tüm web siteleri için önerilen güvenlik üstbilgileri:
X-Content-Type-Options
X-Frame-Options
Kaynaklar Arası Kaynak Politikası (CORP)
Kaynaklar Arası Açılış Politikası (COOP)
HTTP Katı Taşıma Güvenliği (HSTS)
Gelişmiş özelliklere sahip web siteleri için güvenlik üstbilgileri:
Kaynaklar Arası Kaynak Paylaşımı (CORS)
Kaynaklar Arası Yerleştirme Politikası (COEP)
Web'deki bilinen tehditler
Güvenlik başlıklarını incelemeden önce web'deki bilinen tehditler ve bu güvenlik başlıklarını neden kullanmak istediğiniz hakkında bilgi edinin.

Güvenlik başlıklarını incelemeye başlamadan önce web'deki bilinen tehditler ve bu güvenlik başlıklarını neden kullanmak istediğiniz hakkında bilgi edinin.

Sitenizi yerleştirme güvenlik açıklarına karşı koruyun

Uygulamanız tarafından işlenen güvenilmeyen verilerin davranışını etkileyebileceği ve genellikle saldırgan tarafından kontrol edilen komut dosyalarının yürütülmesine yol açabileceği durumlarda yerleştirme güvenlik açıkları ortaya çıkar. Yerleştirme hatalarının neden olduğu en yaygın güvenlik açığı, yansıtılan XSS, depolanmış XSS, DOM tabanlı XSS ve diğer varyantlar dahil olmak üzere çeşitli biçimlerdeki siteler arası komut dosyası çalıştırmadır (XSS).

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

Enjeksiyonlara karşı geleneksel savunma yöntemleri arasında, HTML şablon sistemlerinde otomatik kaçış karakteri kullanımının tutarlı bir şekilde kullanılması, tehlikeli JavaScript API'lerinin kullanılmaması ve dosya yüklemelerini ayrı bir alanda barındırarak ve kullanıcı tarafından kontrol edilen HTML'yi temizleyerek kullanıcı verilerinin uygun şekilde işlenmesi yer alır.

  • Yerleştirme riskini azaltmak amacıyla, uygulamanız tarafından yürütülebilecek komut dosyalarını kontrol etmek için İçerik Güvenliği Politikası'nı (İGP) kullanın.
  • Tehlikeli JavaScript API'lerine iletilen verilerin temizlenmesini zorunlu kılmak için Güvenilir Türleri kullanın.
  • Tarayıcı, web sitenizin kaynaklarının MIME türlerini yanlış yorumlayarak komut dosyasının yürütülmesine neden olabilir. Bunu önlemek için X-Content-Type-Options kullanın.

Sitenizi diğer web sitelerinden izole etme

Web'in açıklığı, web sitelerinin, uygulamanın güvenlik beklentilerini ihlal edebilecek şekillerde birbirleriyle etkileşime girmesini sağlar. Kimlik doğrulaması yapılmış istekler göndermek veya saldırganın dokümanına başka bir uygulamadan veri yerleştirmek de bu kapsamdadır. Bu da saldırganın uygulama verilerini değiştirmesine veya okumasına olanak tanır.

Web izolasyonunu zayıflatan yaygın güvenlik açıkları arasında tıklama tuşuyla saldırı, siteler arası istek sahtekarlığı (CSRF), siteler arası komut dosyası ekleme (XSSI) ve çeşitli siteler arası sızıntılar yer alır.

Bu başlıklar ilginizi çekiyorsa Spectre'den Sonra Web Geliştirme başlıklı makaleyi okumanızı öneririz.

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

Spectre, yüklenen tüm verileri aynı kaynak politikasına rağmen okunabilecek şekilde aynı tarama bağlam grubuna yerleştirir. Tarayıcılar, "kökler arası erişime kapalı" adlı özel bir ortamda güvenlik açığından yararlanabilecek özellikleri kısıtlar. Kökler arası erişime kapalı web siteleri sayesinde SharedArrayBuffer gibi güçlü özellikleri kullanabilirsiniz.

Sitenize gelen trafiği şifreleme

Şifreleme sorunları, uygulama geçiş halindeki verileri tam olarak şifrelemediğinde ortaya çıkar. Bu da, gizlice izleyen saldırganların kullanıcının uygulama ile etkileşimleri hakkında bilgi edinmesine olanak tanır.

Yetersiz şifreleme aşağıdaki durumlarda ortaya çıkabilir: HTTPS kullanılmaması, karma içerik, çerezlerin Secure özelliği (veya __Secure ön eki) olmadan ayarlanması veya 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 eklenmesine ve çalıştırılmasına 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ı hafifletmek 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şturduysanız tek seferlik anahtara dayalı katı bir CSP kullanın.
  • HTML'nizin statik olarak veya önbelleğe alınması gerekiyorsa (ör. tek sayfalık bir uygulamaysa) karma oluşturmaya dayalı katı bir CSP kullanın.

Kullanım örneği: Tek seferlik anahtara dayalı bir İGP

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

1. Tek seferlik anahtara dayalı 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ındaki her istek için yeni bir komut dosyası tek seferlik rastgele sayı 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.

dizin.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, tek seferlik anahtara dayalı katı CSP'nin iyi bir örneğidir. Nasıl kullanıldığını görmek için Geliştirici Araçları'ndan yararlanın.

2. Karma oluşturmaya dayalı katı bir CSP kullanın {: #hash-based-csp}

HTML'nizin statik veya önbelleğe alınmış olarak sunulması 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';

Çoğu tarayıcı harici komut dosyalarının karma oluşturma işlemini desteklemediğinden, HTML'de karma oluşturmaya dayalı bir politika uygulamak için komut dosyalarınızı satır içi olarak eklemeniz gerekir.

dizin.html

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

Harici komut dosyalarını yüklemek için B seçeneği: Karma oluşturmaya dayalı CSP yanıt üst bilgisi bölümündeki "Kaynak kodlu komut dosyalarını dinamik olarak yükleme"yi okuyun.

CSP Değerlendirici, CSP'nizi değerlendirmek için iyi bir araç olmasının yanı sıra tek seferlik anahtara dayalı katı CSP örneğidir. Nasıl kullanıldığını görmek için Geliştirici Araçları'ndan yararlanın.

Desteklenen tarayıcılar

CSP ile ilgili dikkat edilmesi gereken diğer noktalar

  • frame-ancestors yönergesi, sitenizi güvenilmeyen sitelerin sitenizi yerleştirmesine izin vermeniz durumunda ortaya çıkan bir risk olan tıklama tuşuyla saldırıya karşı korur. Daha basit bir çözümü tercih ederseniz yüklenmesini engellemek için X-Frame-Options kullanabilirsiniz. Ancak frame-ancestors, yerleşik olarak yalnızca belirli kaynaklara izin vermenizi sağlayan gelişmiş bir yapılandırma sunar.
  • Sitenizdeki tüm kaynakların HTTPS üzerinden yüklendiğinden emin olmak için bir CSP kullanmış olabilirsiniz. Bu durum artık geçerliliğini yitirdi: Günümüzde çoğu tarayıcı karma içerikleri engelliyor.
  • Bir İGP'yi yalnızca rapor modunda da ayarlayabilirsiniz.
  • Sunucu tarafında bir CSP'yi başlık olarak ayarlayamıyorsanız meta etiket olarak da ayarlayabilirsiniz. Meta etiketler için yalnızca raporlama modunu kullanamayacağınızı unutmayın (bu durum değişebilir).

Daha fazla bilgi

Güvenilir Türler

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

Güvenilir Türler, DOM XSS'den arındırılmış uygulamalar yazmak, güvenlik incelemesi yapmak ve uygulamaları korumak için gerekli araçları sağlar. Bunlar CSP aracılığıyla etkinleştirilebilir ve tehlikeli web API'lerini yalnızca özel bir nesneyi (güvenilir tür) kabul edecek şekilde sınırlandırarak JavaScript kodunu varsayılan olarak güvenli hale getirebilir.

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

Örnek kullanımlar

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 => {
      return str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
    }
  });
}

// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = &#39;some string&#39;; // This throws an exception.

// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML(&#39;&lt;img src=x onerror=alert(1)&gt;&#39;);
el.innerHTML = escaped;  // &#39;&amp;lt;img src=x onerror=alert(1)&amp;gt;&#39;

Güvenilir Türleri kullanma

  1. Tehlikeli DOM alıcıları için Güvenilir Türleri zorunlu kılma CSP ve Güvenilir Türler üstbilgisi:

    Content-Security-Policy: require-trusted-types-for 'script'

    Şu anda require-trusted-types-for yönergesinin kabul edilen tek değeri 'script''tir.

    Elbette Güvenilir Türleri diğer CSP yönergeleriyle birleştirebilirsiniz:

Yukarıdaki tek seferlik anahtara dayalı CSP'yi Güvenilir Türlerle birleştirme:

Content-Security-Policy:
  script-src &#39;nonce-{RANDOM1}&#39; &#39;strict-dynamic&#39; https: &#39;unsafe-inline&#39;;
  object-src &#39;none&#39;;
  base-uri &#39;none&#39;;
  require-trusted-types-for &#39;script&#39;;

<aside class="note"><b>Not: </b> Ek bir <code>Trusted-types</code> yönergesi ayarlayarak, izin verilen Güvenilir Türler politika adlarını sınırlayabilirsiniz (örneğin, <code>güvenilir türler myPolicy</code>). Ancak bu bir gereklilik değildir. &lt;/aside&gt;

  1. Politika tanımlama

    Politika:

    // Feature detection
    if (window.trustedTypes && trustedTypes.createPolicy) {
      // Name and create a policy
      const policy = trustedTypes.createPolicy('escapePolicy', {
        createHTML: str => {
          return str.replace(/\/g, '>');
        }
      });
    }
  2. Politikayı uygulama

    DOM'ye veri yazarken bu politikayı kullanın:

    // Assignment of raw strings are blocked by Trusted Types.
    el.innerHTML = &#39;some string&#39;; // This throws an exception.</p>
    
    <p>// Assignment of Trusted Types is accepted safely.
    const escaped = policy.createHTML(&#39;<img src="x" onerror="alert(1)">&#39;);
    el.innerHTML = escaped;  // &#39;&lt;img src=x onerror=alert(1)&gt;&#39;

    require-trusted-types-for 'script' ile güvenilir bir tür kullanmak zorunludur. Tehlikeli herhangi bir DOM API'nin bir dizeyle kullanılması hataya neden olur.

Desteklenen tarayıcılar

Daha fazla bilgi

X-Content-Type-Options

Alanınızdan kötü amaçlı bir HTML dokümanı sunulduğunda (örneğin, bir fotoğraf hizmetine yüklenen bir resim geçerli HTML işaretlemesi içeriyorsa) bazı tarayıcılar bunu etkin bir doküman olarak değerlendirir ve komut dosyalarını uygulama bağlamında yürütmesine izin verir. Bu da siteler arası komut dosyası çalıştırma hatasına yol açar.

X-Content-Type-Options: nosniff, tarayıcıya belirli bir yanıt için Content-Type üstbilgisinde ayarlanan MIME türünün doğru olduğunu bildirerek bu durumu önler. Bu üstbilgi, tüm kaynaklarınız için önerilir.

Kullanım örneği

X-Content-Type-Options: nosniff
X-Content-Type-Options nasıl kullanılır?

Sunucunuzdan sunulan tüm kaynaklar için doğru Content-Type üstbilgisiyle birlikte X-Content-Type-Options: nosniff kullanılması önerilir.

X-Content-Type-Options: nosniff

Doküman HTML'si ile gönderilen örnek üstbilgiler

X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8

Desteklenen tarayıcılar

Tarayıcı desteği

  • Chrome: 64.
  • Edge: 12.
  • Firefox: 50.
  • Safari: 11.

Kaynak

Daha fazla bilgi

X-Frame-Options

Zararlı bir web sitesi sitenizi iframe olarak yerleştirebilirse saldırganlar tıklama tuşuyla saldırı yaparak kullanıcının istemeden işlem yapmasını sağlayabilir. Ayrıca, bazı durumlarda Spectre türü saldırılar, kötü amaçlı web sitelerinin yerleştirilmiş bir dokümanın içeriği hakkında bilgi edinmesine olanak tanır.

X-Frame-Options, bir tarayıcının <frame>, <iframe>, <embed> veya <object> içinde bir sayfayı oluşturmasına izin verilip verilmeyeceğini belirtir. Tüm dokümanların, diğer dokümanlar tarafından yerleştirilmesine izin verip vermediğini belirtmek için bu üstbilginin gönderilmesi önerilir.

Kullanım örneği

X-Frame-Options: DENY
X-Frame-Options nasıl kullanılır?

Yerleştirilmek üzere tasarlanmamış tüm dokümanlar X-Frame-Options üstbilgisini kullanmalıdır.

Aşağıdaki yapılandırmaların iframe yüklemeyi nasıl etkilediğini bu demoda deneyebilirsiniz. X-Frame-Options açılır menüsünü değiştirin ve İçeriği yeniden yükle düğmesini tıklayın.

Web sitenizi diğer web siteleri tarafından yerleştirilmeye karşı korur

Diğer dokümanlar tarafından yerleştirilmesini reddetme.

X-Frame-Options: DENY
X-Frame-Options: DENY

Web sitenizi kaynak farklılığı olan web siteleri tarafından yerleştirilmeye karşı korur

Yalnızca aynı kaynaktaki dokümanlar tarafından yerleştirilmesine izin verin.

X-Frame-Options: SAMEORIGIN

Desteklenen tarayıcılar

Tarayıcı desteği

  • Chrome: 4.
  • Kenar: 12.
  • Firefox: 4.
  • Safari: 4.

Kaynak

Daha fazla bilgi

Kaynaklar Arası Kaynak Politikası (CORP)

Saldırganlar, web tabanlı siteler arası sızıntılardan yararlanarak kendileri hakkında bilgi edinmek için başka bir kaynaktan (ör. sitenizden) kaynaklar yerleştirebilir.

Cross-Origin-Resource-Policy, yüklenmesi mümkün olan web sitesi grubunu belirterek bu riski azaltır. Başlık, üç değerden birini alır: same-origin, same-site ve cross-origin. Tüm kaynakların, diğer web siteleri tarafından yüklenmeye izin verip vermediklerini belirtmek için bu başlığı göndermesi önerilir.

Kullanım örneği

Cross-Origin-Resource-Policy: same-origin
CORP'u kullanma

Tüm kaynakların aşağıdaki üç üstbilgeden biriyle sunulması önerilir.

Aşağıdaki yapılandırmaların, bu demo üzerinde Cross-Origin-Embedder-Policy: require-corp ortamında kaynak yüklemeyi nasıl etkilediğini deneyebilirsiniz. Cross-Origin-Resource-Policy açılır menüsünü değiştirin ve efekti görmek için iframe'i yeniden yükle veya Resmi yeniden yükle düğmesini tıklayın.

Kaynakların yüklenmesine izin ver cross-origin

Benzer bir etkiye sahip CORS aracılığıyla sunulmadıkları sürece, CDN benzeri hizmetlerin kaynaklara cross-origin uygulamasını (genellikle kaynak farklı sayfalar tarafından yüklendikleri için) öneririz.

Cross-Origin-Resource-Policy: cross-origin
Cross-Origin-Resource-Policy: cross-origin

same-origin kaynağından yüklenecek kaynakları sınırlama

same-origin, yalnızca aynı kaynaktan sayfalar tarafından yüklenmesi amaçlanan kaynaklara uygulanmalıdır. Bu öneriyi, kullanıcıyla ilgili hassas bilgiler içeren kaynaklara veya yalnızca aynı kaynaktan çağrılması amaçlanan bir API'nin yanıtlarını içeren kaynaklara uygulamanız gerekir.

Bu başlığa sahip kaynakların, örneğin yeni bir tarayıcı penceresinde URL'ye giderek doğrudan yüklenmeye devam edebileceğini unutmayın. Kaynaklar Arası Politika, kaynağı yalnızca diğer web siteleri tarafından yerleştirilmeye karşı korur.

Cross-Origin-Resource-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin

same-site'ten yüklenecek kaynakları sınırlama

same-site öğesinin yukarıdakilere benzer, ancak sitenizin diğer alt alanları tarafından yüklenmesi amaçlanan kaynaklara uygulanması önerilir.

Cross-Origin-Resource-Policy: same-site
Cross-Origin-Resource-Policy: same-site

Desteklenen tarayıcılar

Tarayıcı desteği

  • Chrome: 73.
  • Edge: 79.
  • Firefox: 74.
  • Safari: 12.

Kaynak

Daha fazla bilgi

Çapraz Kaynak Açıcı Politikası (COOP)

Saldırganın web sitesi, web tabanlı siteler arası sızıntılardan yararlanarak bir site hakkında bilgi edinmek için pop-up pencerede başka bir site açabilir. Bazı durumlarda bu, Spectre'ye dayalı yan kanal saldırılarının da kullanılmasına olanak tanıyabilir.

Cross-Origin-Opener-Policy üstbilgisi, bir dokümanın window.open() aracılığıyla açılan kaynakta çapraz pencerelerden veya rel="noopener" olmadan target="_blank" içeren bir bağlantıdan kendini izole etmesine olanak tanır. Sonuç olarak, dokümanı kaynak farklılığı olan bir kullanıcı açarsa bu dokümanla ilgili referans alamaz ve dokümanla etkileşim kuramaz.

Kullanım örneği

Cross-Origin-Opener-Policy: same-origin-allow-popups
COOP nasıl kullanılır?

Aşağıdaki yapılandırmaların, kaynak farklı pop-up pencereyle iletişimi nasıl etkilediğini bu demoda deneyebilirsiniz. Hem doküman hem de pop-up pencere için Cross-Origin-Opener-Policy açılır menüsünü değiştirin, Pop-up aç düğmesini ve ardından mesajın gerçekten teslim edilip edilmediğini görmek için postMessage gönder'i tıklayın.

Bir dokümanı kaynakta farklı pencerelerden izole etme

same-origin ayarı, dokümanı kaynaklar arası doküman pencerelerinden izole eder.

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

Bir dokümanı kaynakta farklı pencerelerden izole etme ancak pop-up'lara izin verme

same-origin-allow-popups ayarı, COOP'u same-origin veya same-origin-allow-popups ile ayarlamadıkları sürece bir dokümanın pop-up pencerelerine referans tutmasına olanak tanır. Bu sayede same-origin-allow-popups, dokümanı pop-up pencere olarak açıldığında referans verilmekten koruyabilir ancak dokümanın kendi pop-up'larıyla iletişim kurmasına izin verebilir.

Cross-Origin-Opener-Policy: same-origin-allow-popups
Cross-Origin-Opener-Policy: same-origin-allow-popups

Bir belgenin kaynaklar arası pencereler tarafından referans almasına izin ver

unsafe-none varsayılan değerdir ancak bu dokümanın çapraz kaynaklı bir pencere tarafından açılabileceğini ve karşılıklı erişimi koruyabileceğini açıkça belirtebilirsiniz.

Cross-Origin-Opener-Policy: unsafe-none
Cross-Origin-Opener-Policy: unsafe-none

COOP ile uyumlu olmayan rapor kalıpları

COOP, Reporting API ile pencereler arası etkileşimleri engellediğinde rapor alabilirsiniz.

Cross-Origin-Opener-Policy: same-origin; report-to="coop"

COOP yalnızca rapor modunu da destekler. Böylece, kaynaklar arası belgeler arasındaki iletişimi gerçekten engellemeden rapor alabilirsiniz.

Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="coop"

Desteklenen tarayıcılar

Tarayıcı desteği

  • Chrome: 83.
  • Kenar: 83.
  • Firefox: 79.
  • Safari: 15.2.

Kaynak

Daha fazla bilgi

Merkezler Arası Kaynak Paylaşımı (CORS)

Bu makaledeki diğer öğelerin aksine, Çapraz Kökenli Kaynak Paylaşımı (CORS) bir başlık değil, kaynaklar arası kaynaklara erişim isteğinde bulunan ve erişim izni veren bir tarayıcı mekanizmasıdır.

Tarayıcılar, varsayılan olarak bir web sayfasının çapraz kaynaklı kaynaklara erişmesini önlemek için aynı kaynak politikasını uygular. Örneğin, kaynaklar arası bir resim yüklendiğinde, web sayfasında görsel olarak gösterilse bile sayfadaki JavaScript'in resmin verilerine erişimi yoktur. Kaynak sağlayıcı, CORS'u etkinleştirerek kısıtlamaları gevşetebilir ve diğer web sitelerinin kaynağı okumasına izin verebilir.

Örnek kullanım

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
CORS'yi kullanma

CORS'u nasıl yapılandıracağınızı incelemeden önce istek türleri arasındaki farkı anlamanız faydalı olacaktır. İstekler, istek ayrıntılarına bağlı olarak basit istek veya ön uçuş isteğinde bulunmuş istek olarak sınıflandırılır.

Basit istek ölçütleri:

  • Yöntem GET, HEAD veya POST olmalıdır.
  • Özel üst bilgiler yalnızca Accept, Accept-Language, Content-Language ve Content-Type değerlerini içerir.
  • Content-Type, application/x-www-form-urlencoded, multipart/form-data veya text/plain olmalıdır.

Diğer tüm istekler ön uç uçuş isteği olarak sınıflandırılır. Daha fazla bilgi için Cross-Origin Resource Sharing (CORS) - HTTP | MDN başlıklı makaleyi inceleyin.

Basit istek

Bir istek basit istek ölçütlerini karşıladığında tarayıcı, istek kaynağını belirten bir Origin başlığı içeren bir kaynak arası istek gönderir.

Örnek istek başlığı

Get / HTTP/1.1
Origin: https://example.com

Örnek yanıt üstbilgisi

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
  • Access-Control-Allow-Origin: https://example.com, https://example.com'ın yanıtın içeriğine erişebileceğini gösterir. Herhangi bir site tarafından okunabilir olması amaçlanan kaynaklar bu üstbilgiyi * olarak ayarlayabilir. Bu durumda tarayıcı, isteğin yalnızca kimlik bilgileri olmadan yapılmasını gerektirir.
  • Access-Control-Allow-Credentials: true, kimlik bilgilerini (çerezleri) taşıyan isteklerin kaynağı yüklemesine izin Aksi takdirde, istek kaynağı Access-Control-Allow-Origin başlığında bulunsa bile kimliği doğrulanmış istekler reddedilir.

Basit isteğin, bu demoda Cross-Origin-Embedder-Policy: require-corp ortamında kaynak yüklemeyi nasıl etkilediğini deneyebilirsiniz. Etkiyi görmek için Kaynak Arasında Paylaşım onay kutusunu ve Resmi yeniden yükle düğmesini tıklayın.

Önceden uçuş kontrolü yapılan istekler

Ön uç kontrol isteği, sonraki isteğin gönderilmesine izin verilip verilmediğini kontrol etmek için bir OPTIONS isteğiyle başlar.

Örnek istek başlığı

OPTIONS / HTTP/1.1
Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
  • Access-Control-Request-Method: POST, POST yöntemiyle aşağıdaki isteğin yapılmasına izin verir.
  • Access-Control-Request-Headers: X-PINGOTHER, Content-Type, istekte bulunan kişinin sonraki istekte X-PINGOTHER ve Content-Type HTTP üst bilgilerini ayarlamasına olanak tanır.

Örnek yanıt üstbilgileri

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
  • Access-Control-Allow-Methods: POST, GET, OPTIONS, sonraki isteklerin POST, GET ve OPTIONS yöntemleriyle yapılabileceğini belirtir.
  • Access-Control-Allow-Headers: X-PINGOTHER, Content-Type, sonraki isteklerin X-PINGOTHER ve Content-Type üstbilgilerini içerebileceğini belirtir.
  • Access-Control-Max-Age: 86400, önceden yayınlanan istek sonucunun 86.400 saniye boyunca önbelleğe alınabileceğini belirtir.

Desteklenen tarayıcılar

Tarayıcı desteği

  • Chrome: 4.
  • Edge: 12.
  • Firefox: 3.5.
  • Safari: 4.

Kaynak

Daha fazla bilgi

Çapraz Kaynak Yerleştiren Politikası (COEP)

Spectre tabanlı saldırıların kaynak dışı kaynakları çalmasını azaltmak için SharedArrayBuffer veya performance.measureUserAgentSpecificMemory() gibi özellikler varsayılan olarak devre dışıdır.

Cross-Origin-Embedder-Policy: require-corp, bu kaynaklar CORS veya CORP başlıkları aracılığıyla açıkça yüklenmeye uygun hale getirilmediği sürece dokümanların ve çalışanların resim, komut dosyası, stil sayfası, iFrame ve diğer merkezler arası kaynakları yüklemesini engeller. COEP, bir dokümanda kaynaklar arası izolasyon özelliğini etkinleştirmek için Cross-Origin-Opener-Policy ile birleştirilebilir.

Dokümanınız için kökler arası erişimi etkinleştirmek istediğinizde Cross-Origin-Embedder-Policy: require-corp simgesini kullanın.

Kullanım örneği

Cross-Origin-Embedder-Policy: require-corp
COEP'yi kullanma

Örnek kullanımlar

COEP, tek bir require-corp değeri alır. Bu başlığı göndererek tarayıcıya, CORS veya CORP aracılığıyla etkinleştirilmeyen kaynakların yüklenmesini engelleme talimatı verebilirsiniz.

COEP&#39;nin işleyiş şekli

Aşağıdaki yapılandırmaların kaynakları yüklemeyi nasıl etkilediğini bu demoda deneyebilirsiniz. Kaynak yüklemeyi nasıl etkilediğini görmek için Cross-Origin-Embedder-Policy açılır menüsünü, Cross-Origin-Resource-Policy açılır menüsünü, Yalnızca Bildir onay kutusunu vb. değiştirin. Ayrıca, engellenen kaynakların raporlanıp raporlanmadığını görmek için raporlama uç noktası demosunu açın.

Kaynaklar arası izolasyonu etkinleştirme

Cross-Origin-Opener-Policy: same-origin ile birlikte Cross-Origin-Embedder-Policy: require-corp göndererek kökler arası erişime kapalı web sitelerini etkinleştirin.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

COEP ile uyumlu olmayan kaynakları bildirme

COEP nedeniyle engellenen kaynaklarla ilgili raporları Reporting API ile alabilirsiniz.

Cross-Origin-Embedder-Policy: require-corp; report-to="coep"

COEP salt rapor modunu da destekler. Böylece, yükleme kaynaklarını fiilen engellemeden rapor alabilirsiniz.

Cross-Origin-Embedder-Policy-Report-Only: require-corp; report-to="coep"

Desteklenen tarayıcılar

Tarayıcı desteği

  • Chrome: 83.
  • Kenar: 83.
  • Firefox: 79.
  • Safari: 15.2.

Kaynak

Daha fazla bilgi

HTTP Strict Transport Security (HSTS)

Basit bir HTTP bağlantısı üzerinden yapılan iletişim şifrelenmez. Bu nedenle, aktarılan veriler ağ düzeyinde gizli dinleyiciler tarafından erişilebilir.

Strict-Transport-Security başlığı, tarayıcıya siteyi hiçbir zaman HTTP kullanarak yüklememesi ve bunun yerine HTTPS kullanması gerektiğini bildirir. Bu ayar yapıldıktan sonra tarayıcı, üstbilgide tanımlanan süre boyunca yönlendirme olmadan alana erişmek için HTTP yerine HTTPS kullanır.

Kullanım örneği

Strict-Transport-Security: max-age=31536000
HSTS'yi kullanma

HTTP'den HTTPS'ye geçiş yapan tüm web siteleri, HTTP içeren bir istek aldığında Strict-Transport-Security üst bilgisiyle yanıt vermelidir.

Strict-Transport-Security: max-age=31536000

Desteklenen tarayıcılar

Tarayıcı desteği

  • Chrome: 4.
  • Kenar: 12.
  • Firefox: 4.
  • Safari: 7.

Kaynak

Daha fazla bilgi

Daha fazla bilgi