HomeBackend GeliştirmeGüvenlik

Content Security Policy Hakkında Detaylı Bilgi

Content Security Policy Hakkında Detaylı Bilgi

Yeni

 HTTP yanıt başlığı(response header) modern tarayıcılarda yaşabileceğiniz XSS saldırılarını azaltmayı amaçlamaktadır.

Direktiflerden önce hangi tarayıcıların bu başlığı destekleyip desteklemediğini inceleylim.

Tarayıcı Destekleri

Header
CSP Level 2 40+ Ocak 2015 31+ Kısmen
Temmuz 2014
CSP 1.0 25+ 23+ 7+ Edge 12 build 10240+
Kullanımdan kaldırıldı 4+ 10+ Kısıtlı 12+ Kısıtlı
Kullanımdan Kaldırıldı 14+ 6+

Kaynaklar caniuse.com/contentsecuritypolicy, caniuse.com/contentsecuritypolicy2 ve hacks.mozilla.org/2013/05/content-security-policy-1-0-lands-in-firefox-aurora/

Tarayıcınızın CSP başlığını destekleyip desteklemediğiniz şu adresten kontrol edebilirsiniz: content-security-policy.com/browser-test/

Dikkat: Content-Security-Policy başlığı ile X-Content-Security-Policy veya X-Webkit-CSP başlığının beraber kullanılması tarayıcı bazı anormal durumlara yol açabiliyor. Kullanmayın.

Direktifler

Content-Security-Policy başlığı aşağıda tanımlanan direktiflerden biri veya bir kaçı ile birden oluşturulabilir. Birden fazla direktif noktalı virgül ; kullanarak ayrılmalıdır.

Bu tablo hazırlanırken şu adresteki belgeden faydalanılmıştır:

Direktif Örnek Değer Açıklama
   direktifi JavaScript, Resimler, CSS, Font, AJAX sorguları, html5 medyaları vs. için varsayılan politikadır.Örnek değerleri sayfanın aşağısında göreceksiniz.

CSP Level 1 25+ 23+ 7+ 12+

Geçerli JavaScript kaynakları tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

Geçerli CSS kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

Geçerli resim kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

 

(AJAX),

 veya 

 için tanımlanır. Eğer izin verilmeyen kaynaktan bu sorgular yapılırsa tarayıcıdan  

HTTP kodu döner.

CSP Level 1 25+ 23+ 7+ 12+

Geçerli yazı tipi kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

,

 veya 

 için geçerli kaynakları tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

HTML5’in 

,

 etiketleri gibi geçerli ses ve görüntü kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

Geçerli çerçeve kaynağını tanımlar. Artık  

  kullanılıyor, bu yöntem kullanımdan kaldırıldı.

Kullanımdan kaldırıldı.

Sandbox modu sayesinde bir çok etkinliği kısıtlayabilirsiniz. Popupları engeller, formları durdurur, javascriptleri çalıştırmaz vs. vs.

Sandbox direktifi için boş değer girerseniz aşağıdaki listenin tümünü girmiş sayılırsınız veyahut sadece seçtiklerinizin de çalışmasın sağlayabilirsiniz:

,

,

,

,

,

 ve 

CSP Level 1 25+ 50+ 7+ 12+

Tarayıcıya belirttiğiniz adrese direktiflerinizle ilgili hataların POST edilmesini sağlar.  

 ekleyerek herhangi bir şeyi bloklamadan sadece belirttiğiniz adrese rapor gönderir..

CSP Level 1 25+ 23+ 7+ 12+

ve

için geçerli kaynakları tanımlar.

CSP Level 2 40+ 45+

HTML

 işlemi için geçerli kaynakları tanımlar.

CSP Level 2 40+ 36+

 dökümanınıza ekleyebileceğiniz bu etiketlerin kaynaklarını tanımlar. Bu direktifi  

 olarak ayarlamak şuna da eşit sayılır 

CSP Level 2 39+ 33+

 ve 

 ile dökümanınıza ekleyebileceğiniz MIME tiplerini limitler. Örneğin  

 eklemek istiyorsanız şunu kullanmalısınız 

.

CSP Level 2 40+

 

Kaynak Listesi Örnekleri

Yukarıda paylaşmış olduğum direktiflerden sonu -src ile biten direktifler Kaynak Listesi denilen benzer değerler alırlar. ‘none’ dışında bütün kaynaklar birbirleriyle beraber kullanılabilir.

Kaynak Değeri Örnek Açıklama
Yıldız işareti data: blob: filesystem: şeması dışındaki bütün URL’leri kabul eder.
Hiç bir kaynaktan içerik kabul etme.
Aynı alan adın, ip vs.’den içerik yüklemesine izin verir.
data: şemasından resim yüklenmesine izin verir(base64 şifrelenmiş resimler)
İçerikler sadece belirtilen domain’den indirilir
Bütün alt alan isimlerine izin verir 
Belirtilen domain’e HTTPS protokolü kullanmak şartıyla izin verir.
HTTPS olsun hangi domain olursa olsun :)
Style, onlick vs. gibi inline kodlama dediğimiz olaya izin verir.
Dinamik JavaScript kod çalıştırıcısına izin verir 

Content-Security-Policy Örnekleri

Aşağıda bir kaç örnek Content-Security-Policy örnekleri mevcuttur.

Aynı Domain’den Olan Herşeyi Kabul Et

JavaScript’i Aynı Domain’se Kabul Et

Google Analytics’i, Google AJAX CDN’sini ve Aynı Domain’den JavaScript’i Kabul Et

Acemi Politikası

Yeni başlayanların kullanabileceği bir politika, kural olabilir bu. Aynı domain’den resimlere, scriptlere, css ve AJAX’a izin verir. Ve object, media ve frame gibi diğer nesneleri kullanılamaz hale getirir.

Content-Security-Policy Hata Mesajları

Chrome’da geliştirici araçlarında Content-Security-Policy kurallarını ihlal ettiğinizde şu hatayı görürsünüz:

Refused to load the script ‘script-uri’ because it violates the following Content Security Policy directive: “your CSP directive”.

Firefox’da ise web geliştirici araçlarında aynı durumda bu hatayı görürsünüz:

Content Security Policy: A violation occurred for a report-only CSP policy (“An attempt to execute inline scripts has been blocked”). The behavior was allowed, and a CSP report was sent.

Sunucu Taraflı Ayarlama

Sunucu taraflı kodlamalarda kullandığınız web sunucusu HTTP başlıkları göndermenize olanak sağlar. Aşağıda Apache ve Nginx için bu işin yolu yordamı gösterilmiştir.

Apache’de Content-Security-Policy Başlığı Ayarlama

Aşağıdaki kodu Apache konfigürasyon dosyanızda VirtualHost’unuzun olduğu bölüme (httpd.conf) veya .htaccess dosyanıza ekleyebilirsiniz:

Nginx’de Content-Security-Policy Başlığı Ayarlama

Aşağıdaki kodu server{} bloğunuzun arasına ekleyin:

IIS’de Content-Security-Policy Başlığı

Kaynaklar

Yorumlar

TOPLAM 0
DISQUS: 0