Reklam
Content Security Policy Hakkında Detaylı Bilgi

Content Security Policy Hakkında Detaylı Bilgi

Yeni Content-Security-Policy 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
Content-Security-Policy CSP Level 240+ Ocak 201531+ Kısmen
Temmuz 2014
Content-Security-Policy CSP 1.025+23+7+Edge 12 build 10240+
X-Content-Security-Policy Kullanımdan kaldırıldı4+10+ Kısıtlı12+ Kısıtlı
X-Webkit-CSP 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ğerAçıklama
default-src'self' cdn.ornek.com default-src 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+

script-src'self' js.ornek.comGeçerli JavaScript kaynakları tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

style-src'self' css.ornek.comGeçerli CSS kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

img-src'self' img.ornek.comGeçerli resim kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

connect-src'self' XMLHttpRequest (AJAX), WebSocket veya EventSource için tanımlanır. Eğer izin verilmeyen kaynaktan bu sorgular yapılırsa tarayıcıdan  400 HTTP kodu döner.

CSP Level 1 25+ 23+ 7+ 12+

font-srcfont.ornek.comGeçerli yazı tipi kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

object-src'self'<object>, <embed> veya <applet> için geçerli kaynakları tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

media-srcmedia.ornek.comHTML5’in <audio>, <video> etiketleri gibi geçerli ses ve görüntü kaynaklarını tanımlar.

CSP Level 1 25+ 23+ 7+ 12+

frame-src 'self'Geçerli çerçeve kaynağını tanımlar. Artık  child-src  kullanılıyor, bu yöntem kullanımdan kaldırıldı.

Kullanımdan kaldırıldı.

sandboxallow-forms allow-scriptsSandbox 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: allow-forms allow-same-origin allow-scripts allow-popups, allow-modals, allow-orientation-lock, allow-pointer-lock, allow-presentation, allow-popups-to-escape-sandbox ve allow-top-navigation

CSP Level 1 25+ 50+ 7+ 12+

report-uri/report-uriTarayıcıya belirttiğiniz adrese direktiflerinizle ilgili hataların POST edilmesini sağlar.  -Report-Only ekleyerek herhangi bir şeyi bloklamadan sadece belirttiğiniz adrese rapor gönderir..

CSP Level 1 25+ 23+ 7+ 12+

child-src'self'<frame> ve<iframe> için geçerli kaynakları tanımlar.

CSP Level 2 40+ 45+

form-action'self'HTML <form> işlemi için geçerli kaynakları tanımlar.

CSP Level 2 40+ 36+

frame-ancestors'none'<frame> <iframe> <object> <embed> <applet> dökümanınıza ekleyebileceğiniz bu etiketlerin kaynaklarını tanımlar. Bu direktifi  'none' olarak ayarlamak şuna da eşit sayılır X-Frame-Options: DENY

CSP Level 2 39+ 33+

plugin-types'application/pdf'<object> ve <embed> ile dökümanınıza ekleyebileceğiniz MIME tiplerini limitler. Örneğin  <applet> eklemek istiyorsanız şunu kullanmalısınız application/x-java-applet.

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ÖrnekAçıklama
*img-src *Yıldız işareti data: blob: filesystem: şeması dışındaki bütün URL’leri kabul eder.
'none'object-src 'none'Hiç bir kaynaktan içerik kabul etme.
'self'script-src 'self'Aynı alan adın, ip vs.’den içerik yüklemesine izin verir.
data:img-src 'self' data:data: şemasından resim yüklenmesine izin verir(base64 şifrelenmiş resimler)
domain.ornek.comimg-src domain.ornek.comİçerikler sadece belirtilen domain’den indirilir
*.ornek.comimg-src *.ornek.comBütün alt alan isimlerine izin verir example.com
https://cdn.comimg-src https://cdn.comBelirtilen domain’e HTTPS protokolü kullanmak şartıyla izin verir.
https:img-src https:HTTPS olsun hangi domain olursa olsun :)
'unsafe-inline'script-src 'unsafe-inline'Style, onlick vs. gibi inline kodlama dediğimiz olaya izin verir.
'unsafe-eval'script-src 'unsafe-eval'Dinamik JavaScript kod çalıştırıcısına izin verir eval()

Content-Security-Policy Örnekleri

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

Aynı Domain’den Olan Herşeyi Kabul Et

default-src 'self';

JavaScript’i Aynı Domain’se Kabul Et

script-src 'self';

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

script-src 'self' www.google-analytics.com ajax.googleapis.com;

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.

default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';

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:

Header set Content-Security-Policy "default-src 'self';"

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

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

add_header Content-Security-Policy "default-src 'self';";

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

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <add name="Content-Security-Policy" value="default-src 'self';" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

Kaynaklar


Yorum Yapın

Eposta adresiniz görünmeyecektir.

5 × bir =