2. Content Security Policy / İçerik Güvenliği Politikaları
Çağlar ORHAN – 2017 Linux Yaz Kampı –Abant İzzet Baysal Üniversitesi / BOLU S: 2
Tanım: CSP, içerisinde XSS ve veri enjeksiyonu tipi ataklarında bulunduğu, belirli tip atakların tespiti ve bir ölçüde
hafifletilmesi için eklenmiş bir güvenlik katmanıdır.
CSP tamamen geriye dönük uyumlu planlanmakla birlikte CSP2 de belirtilmiş bazı konularda geriye dönük destek yoktur.
Örneğin desteklemeyen browserlar, CSP uygulamamış sunucularla iletişen browserlar, sadece standart SOP çalıştıran
browserlar sunucudan gelen CSP header’ı basitçe reddeder.
CSP’yi aktif hale getirebilmek için sunucunuzun Content-Security-Policy HTTP Header’ını döndürecek şekilde yeniden
konfigüre edilmesi gerekmektedir.
Bazı yerlerde X-Content-Security-Policy denildiğini görseniz de aldırmayın bu eski bir sürümü ifade etmektedir.
HTTP Header’ı döndürmeye alternatif olarak <meta> etiketi de ekleyebilirsiniz.
Örneğin:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
3. Content Security Policy / İçerik Güvenliği Politikaları
Çağlar ORHAN – 2017 Linux Yaz Kampı –Abant İzzet Baysal Üniversitesi / BOLU S: 3
AMAÇLAR
CSS Tehtitini Azaltmak
CSP’nin ana amacı XSS’i azaltmak ve XSS ataklarını raporlamaktır. XSS atağı browserın sunucudan gelen içeriğe güvenini
sömürerek yapılmaktadır. Kurbanın browserı sunucudan gelen zararlı kodu çalıştırmaktadır, çünkü, bazen içerik geldiğini
söylediği yerden gelmese de browsera göre bu içerik güvendiği sunucudan gelmektedir.
CSP, sunucu adminlerine hedefteki kurban browserın sadece güvenilir domainlerden çalıştırılabilir script indirmesini göz
önüne almasını sağlayarak XSS açığının gerçekleştiği vektörlerin (harici domainlerden gelecek scriptler) miktarını azaltma
veya yok etme şansı verir.
CSP uyumlu bir browser, sadece whitelist domainlerin listesindeki kaynaklardan gelen scriptleri yükler ve çalıştırır. Diğer
tüm kaynaklardan gelen scriptleri, inline script kodlarını ve html attribute’leri içine yazılan event-handler’ları gözardı
eder.
Bu konuda son nokta ise hiçbir scriptin çalışmasını istemeyen sayfaların (web uygulamalarının) bir seçenek olarak global
anlamda scriptlere izin verilmemesini sağlamasıdır.
Paket Koklama Ataklarının (Packet Sniffing Attack) Azaltılması
İçeriğin yükleneceği domainlerin belirtilmesine ek olarak sunucu hangi protokolleri kullanacağını bildirebilir. Örneğin (ve
ideal olarak güvenli bir bakış açısından) bir sunucu tüm içeriğin HTTPS ile yüklenmesi gerektiğini bildirebilir. Bütün bir
data iletişim güvenlik stratejisi, data transferi için sadece HTTPS zorlamasını içermez. Aynı zamanda tüm cookie’leri
secure flag ile işaretleyebilir, tüm http sayfaları otomatik olarak https’ye yönlendirebilir. Siteler aynı zamanda Strict-
Transfer-Security HTTP header’ını kullanarak browserın sadece encrypted kanaldan bağlanmasını sağlayabilir.
4. CSP’nin Kullanımı
1) Policy’ı belirtin
2) Policy içeriğini detaylı bir şekilde yazın
Content-Security-Policy: Policy
Örnekler:
1. Diğer tüm kaynakları devre dışı bırakarak sadece CSP belirleyen kaynağa izin verin
Content-Security-Policy: default-src 'self‘
2. Bir kaynak belirtin, bu CSP’nin set edildiği kaynakdan başka bir domain de olabilir
Content-Security-Policy: default-src 'self' *.trusted.com
3. Web sitesi yetkilisi kullanıcıya tüm imajları herhangi bir yerden ancak ses ve video içeriklerini güvenilir kaynaktan,
ancak scriptlerin sadece belirli sunuculardaki güvenilir kaynaklardan indirmesini söylüyor.
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src
userscripts.example.com
Content Security Policy / İçerik Güvenliği Politikaları
Çağlar ORHAN – 2017 Linux Yaz Kampı –Abant İzzet Baysal Üniversitesi / BOLU S: 4
5. Content Security Policy / İçerik Güvenliği Politikaları
Çağlar ORHAN – 2017 Linux Yaz Kampı –Abant İzzet Baysal Üniversitesi / BOLU S: 5
CSP’nin Test Edilmesi
Rahatça geliştirme yapabilmek için CSP sadece raporlama modu ile yapılandırılabilir. Bu yöntemle CSP kullanıcıya
zorlanmaz ama tüm CSP ihlalleri belirtilen URI’ye raporlanır. (iki mod birlikte de kullanılabilir. Böylece hem raporlama yapılır
hem de CSP zorlanır)
Content-Security-Policy-Report-Only: policy
Örnek:
Content-Security-Policy: default-src 'self'; report-uri http://reportcollector.example.com/collector.cgi
Dönen Rapor bir JSON stringidir.
Örnek:
{
"csp-report": {
"document-uri": "http://example.com/signup.html", /* CSP uyguladığımız sitenin urisi*/
"referrer": "", /* ihlalin olduğu –gerçekleştiği- documentin referreri */
"blocked-uri": "http://example.com/css/style.css", /* ihlal içeriğinin geldiği uri */
"violated-directive": "style-src cdn.example.com", /* ihlal edilen policy bölümü */
"original-policy": "default-src 'none'; style-src cdn.example.comreport-uri /_/csp-reports" /* Orijinal CSP HTTP Header*/
}
}
6. Content Security Policy / İçerik Güvenliği Politikaları
Çağlar ORHAN – 2017 Linux Yaz Kampı –Abant İzzet Baysal Üniversitesi / BOLU S: 6
BrowserDesteği
7. CSP 2 ve nonce, CSP 3 ve strict-dynamic
Bu iki özellik CSP 1 uyumlu değildir. Bu nedenle eski browserlar ve bazı desteklemeyen browserlarda (IE, EDGE) çalışmaz.
Örnek:
Content-Security-Policy: script-src 'nonce-random-123' 'strict-dynamic';
<script src="http://exampe.com/map.js" nonce=random-123></script>
8. Content Security Policy / İçerik Güvenliği Politikaları
Çağlar ORHAN – 2017 Linux Yaz Kampı –Abant İzzet Baysal Üniversitesi / BOLU S: 8
Kaynaklar:
1. https://www.w3.org/TR/CSP2/
2. https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
3. https://ozgurwebgunleri.org.tr/2016/wp-content/upload/sunum/ziyahan-albeniz.pdf
4. https://www.netsparker.com.tr/blog/web-guvenligi/CSP-Content-Security-Policy/
5. https://research.google.com/pubs/pub45542.html
6. https://www.trkodlama.com/makaleler/guvenlik/content-security-policy-hakkinda-detayli-bilgi-6522.html
7. https://content-security-policy.com/