Missing CSP Header Açıklığı (CWE-16)
Bu makalede Missing CSP Header (CWE-16), yani Eksik CSP Başlığı, diğer bir ifadeyle; Güncel Web Tarayıcılarda XSS Saldırılarına Karşı Koruma Eksikliği açıklığı anlatılacaktır.

Açıklık Önem Derecesi:

Düşük

Açıklığın Etkisi:

XSS saldırılarına karşı savunmasız kalma, Clickjacking saldırılarına karşı savunmasız kalma

Açıklığın Açıklaması:

Content-Security-Policy yanıt başlığı güncel web tarayıcılarda XSS saldırılarını önleyen bir http güvenlik başlığıdır. Web tarayıcılarının görüntülediği web uygulamalarda xss zararlısı gelirse bu xss zararlısının web tarayıcıda çalışmasını önler ve son kullanıcının güven içinde web uygulamada gezinmesini sağlar.

Bu başlık önlemini güncel web tarayıcıların hemen hemen tamamı desteklemektedir.



Bu başlık ile yeni web tarayıcılarda XSS önlenmektedir.

Not: Bu başlık ile ayrıca Clickjacking saldırıları da önlenebilmektedir.

Açıklığın Önlemi:

1. Kaynak Kod Üzerinden Önlem

CSP önlemi web uygulamaların back-end (arka uç) kaynak kodlarında veya front-end (ön uç) ‘daki html <head> bölümünde <meta> etiketleri ile tanımlanabilir.

a) Spring Framework - Java Uygulamalar

Spring Framework’ünde java uygulamalarda CSP aktifleştirme ayarı şu şekildedir:

Java:

// Adding CSP Header Using Spring Security Java Configuration
@Configuration
public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Add CSP headers
        http.headers()
            .contentSecurityPolicy("script-src 'self' https://example.com; object-src https://example.com; report-uri /csp-report-endpoint/");
    }
}

b) PHP Web Uygulamalar

PHP uygulamalarda CSP şu şekilde eklenebilir:

PHP:

<?php

    // Restricting Content-Security-Policy to 
    // Only Obtain Embedded Content from Current 
    // Web-Application

    header("Content-Security-Policy: default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self'; style-src 'self';");

?>

c) JS Web Uygulamalar

Javascript uygulamalarda CSP şu şekilde eklenebilir:

JS:

/* Setting The CSP Header Explicitly */

app.use(function(req, res, next) {
    res.setHeader("Content-Security-Policy", "script-src 'self'");
    return next();
});

2. Yapılandırma Dosyaları Üzerinden Önlem

CSP önlemi web uygulamaların konfigürasyon dosyalarında tanımlanabilir.

a) Spring Framework - Java Web Uygulamalar

Spring Framework’ünde java uygulamalarda CSP aktifleştirme ayarı şu şekildedir:

XML:

// Adding CSP Header Using Spring Security XML Configuration
<http>
   <!-- ... -->

    <headers>
            <content-security-policy policy-directives="script-src 'self' https://apis.example.com">
            </content-security-policy>
    </headers>

</http>

b) IIS Web Sunucular

IIS sunucularda konfigürasyon dosyası Web.config açılmalıdır ve httpprotocol etiketi içerisindeki customheaders etiketi içerisine gösterilen satır eklenmelidir.

<!-- GÜVENLİ YAPILANDIRMA -->

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.webServer>
        <security>
            ...
        </security>
        <httpProtocol>
            <customHeaders>
                <add name="Content-Security-Policy" value="default-src='self'">
            </add>
            </customHeaders>
        </httpProtocol>
    </system.webServer>
</configuration>

c) Apache Web Sunucular

Debian / Ubuntu tabanlı linux işletim sistemlerinde yer alan apache web sunucularda apache2.conf, RedHat / Centos tabanlı linux işletim sistemlerinde yer alan apache web sunucularda httpd.conf dosyası açılmalıdır ve dosya içeriğinin en altına belirtilen satır eklenmelidir.

Header add Content-Security-Policy "default-src 'self'"

d) Nginx Web Sunucular

Nginx web sunucularda nginx.conf konfigürasyon dosyası açılmalıdır ve dosya içeriğindeki http { ... } bloğu içerisine belirtilen satır eklenmelidir.

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

[!] Uyarı

Content-Security-Policy başlığı "default-src 'self'" değeriyle doldurulduğunda css, javascript, resim dosyaları gibi kaynaklar tümüyle uygulama içindeyse çalışabilecektirler. Eğer kaynaklar dışarıdaki belirli bir sunucudan uygulamaya çekilmek suretiyle kullanılmaktaysa bu kaynakların çalışması engellenecektir. Bu kuralı esnetme gereği duyulabilir. Örneğin Content-Security-Policy başlığı şu değerle doldurulursa


style-src * 'unsafe-inline'; script-src * 'unsafe-inline'; img-src *; connect-src *; frame-src *; object-src: *


tüm dış sunuculardan kurum web uygulamasına kaynak gelebilir ve çalışabilir izni verilmiş olur. Bu oldukça esnek kurala Javascript dosyalarının dışarıdaki google sunucularından gelişine izin ver, başka hiçbir sunucuya izin verme kısıtı konulmak istenirse CSP başlığı aşağıdaki gibi güncellenmelidir:

style-src * 'unsafe-inline'; script-src https://www.google.com.tr 'unsafe-inline'; img-src *; connect-src *; frame-src *; object-src: *

Kurum web uygulama içerisinde script etiketleri ve style etiketleri aralarında javascript ve css kodları olacak şekilde kullanım halindelerse 'unsafe-inline'lar ile onların çalışırlığı izni sürdürülmüş olacaktır, ancak 'unsafe-inline' halen kurum web uygulamasını güvensiz kılmaktadır. Bu nedenle kurum web uygulamasını güvende tutacak metot uygulamadaki tüm script ve style etiketlerinin html head etiketleri arasında dosya.css ve dosya.js dosya dahil yöntemiyle kullanılmasıdır ve 'unsafe-inline'ların kaldırılmasıdır.

style-src *; script-src https://www.google.com.tr; img-src *; connect-src *; frame-src *; object-src: *

Eğer uygulamada teknik zorluklar bu konuda yaşanacaksa bu durumda yine 'unsafe-inline'lar kaldırılmalıdır ve uygulamadaki script ve style etiketleri içeriklerinin hash (özet) hali örneğin sha256 algoritmasıyla alınıp hash (özet) değeri base64 ile kodlanarak CSP başlığındaki script-src ve style-src'a verilmelidir. Böylece uygulamadaki satır arası olan bu script ve style blokları CSP başlığınca tanımlı olacaklardır ve saldırı sonrası ilave gelebilecek tanımsız bloklara (script ve style'lara) karşı önlem sürmüş olacaktır.

style-src *; script-src https://www.google.com.tr 'sha256-B2yPHKaXnvFWtRChIbabYmUBFZdVfKKXHbWtWidDVF8='; img-src *; connect-src *; frame-src *; object-src: *

Sonuç olarak CSP başlığındaki tüm anahtar kelimelerin değeri script-src'da olduğu gibi uygulama hangi uzak sunucu bağlantılarına ihtiyaç duymaktaysa onları gösterecek şekilde ve istisnalar hash (özet) halde eklenecek şekilde ayarlanmalıdır. Bu şekilde kurum web uygulaması güvende tutulmalıdır.

Sonuç

En nihayetinde yapılandırma dosyasında yapılan değişiklik sonrası web sunucusu yazılımı yeniden başlatılmalıdır. Böylelikle kullanıcıların gönderdiği http / https taleplerine karşılık web sunucudan dönen http / https yanıtlarında Content-Security-Policy önlemi yer alır duruma gelecektir.

Yararlanılan Kaynaklar:

  • http://www.insiderattack.net/2014/04/configuring-secure-iis-response-headers.html
  • https://www.ryadel.com/en/iis-web-config-secure-http-response-headers-pass-securityheaders-io-scan/
  • https://stackoverflow.com/questions/16385541/content-security-policy-invalid-command
  • https://www.keycdn.com/blog/http-security-headers/
  • https://stackoverflow.com/questions/39502968/apache-difference-between-header-always-set-and-header-set
  • https://scotthelme.co.uk/a-new-security-header-referrer-policy/
  • https://blog.qualys.com/securitylabs/2016/01/07/open-redirection-a-simple-vulnerability-threatens-your-web-applications
  • https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-3175
  • https://blog.appcanary.com/2017/http-security-headers.html
  • https://www.netsparker.com.tr/blog/web-guvenligi/turkiyede-http-guvenlik-headerlerinin-kullanimi/
Bu yazı 25.10.2025 tarihinde, saat 03:46:05'de yazılmıştır.
Yazar : Hasan Fatih ŞİMŞEK Görüntülenme Sayısı : 13
Yorumlar
Henüz yorum girilmemiştir.
Yorum Ekle
*
* (E-posta adresiniz yayınlanmayacaktır.)
*
*

#Arşiv


#Giriş

ID :
Şifre :