İçerik Güvenliği İlkeleri (CSP'ler) ile Spring Boot'ta Siteler Arası Komut Dosyası Çalıştırmayı (XSS) Önleyin

Giriş

Bir web uygulamasını kullanırken kullanıcıların ve kişisel verilerinin güvenliği çok önemlidir. Bu yol gösterici ilke, web geliştirmenin ilk aşamalarında bile kabul edilmiş olsa da, kötü niyetli kişiler uygulamalarda boşluklar bulur ve kullanıcılarınızı istismar edebilir.

Birçok "standart" saldırı iyi bilinir ve belgelenir ve bunlardan korunmak zor değildir. Geliştiricinin güvenlik uygulamalarını kendi başına uygulama yükünü hafifletmek için Spring Boot gibi çerçeveler çeşitli güvenlik önlemlerini soyutladı ve iyi bilinen saldırıları önlemek için uygulamalarınıza güvenlik filtreleri uygulamanıza izin verdi.

Bu kısa kılavuzda, Siteler Arası Komut Dosyası Çalıştırmanın (XSS) ne olduğuna, birinin bu saldırıyı kendi uygulamanızda nasıl gerçekleştirebileceğine ve Spring Boot ile bunu nasıl kolayca önleyebileceğinize bir göz atacağız.

Siteler Arası Komut Dosyası Çalıştırma (XSS) nedir?

Siteler Arası Komut Dosyası Oluşturma, kötü bir aktörün bir web uygulamasına bir komut dosyası enjekte ettiği, iyi bilinen, yaygın olarak yayılmış bir istismardır.

Tipik olarak, web uygulamalarına, bir web sayfasındaki komut dosyalarının, kökenleri eşleşmediğinde kaynaklardan gelen verilere erişmesini kısıtlayan aynı Köken politikası uygulanır. Aynı menşe politikası kapsamında - eğer bir sayfadan bir sayfa güvenilir web sitesi kullanıcı ile arayüz oluşturma verilerine (örneğin çerezler gibi) erişebilir, aynı kaynaktan gelen diğer sayfalar da bunu yapabilir. Bu erişim denetimi biçimi, o sırada web uygulamalarındaki verilerin bütünlüğünü korumak için yeterli görünüyordu.

Siteler Arası Komut Dosyası Çalıştırma, aynı kaynak ilkesini atlatır, güvenilir bir web sitesinin sayfasına kötü amaçlı bir komut dosyası ekleyerek. Komut dosyası güvenilir bir web sitesinden çalıştırıldığından, güvenilir bir komut dosyası olarak yürütülür. Kötü amaçlı komut dosyaları ile kötü amaçlı olmayan komut dosyaları arasında ayrım yapmanın net bir yolu yoktu - bu nedenle Siteler Arası Komut Dosyası Oluşturma ile rastgele kod yürütülmesi mümkündü. Bu, can sıkıcı uyarılar eklemekten sosyal mühendislik saldırılarına, sessizce kullanıcı bilgilerini toplamaya veya kullanıcıları güvenilir web sitelerinin parçası gibi görünen kimlik avı sayfalarına yönlendirmeye kadar uzanır.

çok web siteleri, Siteler Arası Komut Dosyası Çalıştırma saldırılarına karşı hassastır ve bu tür açıklardan yararlanma 90'lardan beri bilinmesine rağmen, günümüzde yaygın bir saldırı olmaya devam etmektedir.

İçerik Güvenliği İlkesi (CSP) ile Spring Boot Uygulamasında XSS'yi Önleme

Spring Boot, güvenliği ciddiye alır ve Spring'in Güvenlik modülü, geliştiricilerin, güvenlik söz konusu olduğunda endişelerini en aza indirmelerine olanak tanıyan esnek ve güçlü güvenlik uygulamaları uygular; bu, çoğu zaman, mesajların bir web'de değiş tokuş edilme şeklinin ilkelerinin düşük düzeyde anlaşılmasını gerektirir. başvuru.

Spring Boot, varsayılan olarak birkaç güvenlik başlığı uygular:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

X-XSS-Koruması varsayılan olarak dahildir! Bu güvenlik başlığı, belirlemek XSS dener ve onları engeller. Ancak bu, hatasız bir süreç değildir ve tarayıcıların farklı dedektör uygulamaları vardır. Chrome gibi bazı tarayıcılarda bile XSS Denetçisini kaldırdı. Ek olarak, otomatik algılama aşağıdakiler için çalışır: Yansıyan XSS Saldırıları, diğer saldırı türleri de mevcuttur.

X-XSS Korumasına daha modern bir alternatif, İçerik-Güvenlik Politikası (CSP), öncelikle hangi kaynakların yüklenebileceği, hangi kökenlerden ve hangi uç noktalardan ilgili politikalarla ilgilenir. 2022 itibariyle CSP, XSS, Clickjacking ve diğer saldırı türlerine karşı en iyi önleme önlemidir. Tüm tarayıcılar CSP'yi uygulamaz, bu nedenle varsayılan olarak güvenlik başlıklarına dahil edilmez.

Not: CSP yerinde olsa bile, doğrulamak için her zaman en iyi eylem şeklidir herhangi Kullanıcı girişi yapın ve kod enjeksiyonunu önlemek için sisteminizi kullanarak işlemenin güvenli olduğundan emin olun.

Spring Boot'da – özel web güvenlik önlemlerini yapılandırmak için, genellikle WebSecurityConfigurerAdapter sınıf ve geçersiz kıl configure() yöntem:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("csp-directives");
    }
}

İçerik güvenliği politikası direktiflerinin (bir dosya olarak sağlanır) ;- ayrılmış dize) kullanım durumunuza ve hangi kaynaklara güvenmek istediğinize bağlıdır:

Content-Security Policy: directive1; directive2; directive3; ... directiveN;

Örneğin, bir web uygulaması, komut dosyalarının yüklenebileceği güvenilir web sitelerini listeleyebilir:

script-src https://trusted.com;

Veya herhangi bir üçüncü taraf web sitesine güvenmeyi atlayabilirsiniz:

script-src self;

Benzer şekilde, bir uygulama eklentilere güvenebilir:

object-src https://trusted.com

Sağlayabileceğiniz çok çeşitli yönergeler vardır, bunlara şunlar dahildir:

  • default-src – Varsayılan geri dönüş
  • child-src – Geçerli web çalışanı kaynakları
  • frame-src – Geçerli kaynaklar s ve s
  • img-src – Görüntüler için geçerli kaynaklar
  • media-src – Geçerli kaynaklar , ve etiketler
  • script-src – Geçerli komut dosyası kaynakları (XSS'yi önlemeye yardımcı olur)
  • style-src – Geçerli kaynaklar elemanları
  • base-uri - Şuradan erişilebilen kaynakları kısıtlar: eleman
  • frame-ancestors – Geçerli ebeveynler , , , vb. öğeler
  • vb.

En iyi uygulamalar, endüstri tarafından kabul edilen standartlar ve dahil edilen hile sayfası ile Git'i öğrenmek için uygulamalı, pratik kılavuzumuza göz atın. Googling Git komutlarını durdurun ve aslında öğrenmek o!

Örneğin, işte bir dizi güvenli politika yönergesi:

script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:;
object-src 'none';
base-uri 'none';
require-trusted-types-for 'script';
report-uri https://csp.example.com;

Bunları Spring Boot uygulamamıza ekleyelim:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
	http
	.headers()
		.contentSecurityPolicy("script-src 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' http: https:; object-src 'none'; base-uri 'none'; require-trusted-types-for 'script'; report-uri https://csp.example.com;");
    }
}

Sen kullanabilirsiniz CSP-Değerlendirici CSP yönergelerinizin geçerli olup olmadığını değerlendirmek için ve güvenlidir ve hangi direktiflerin kolayca istismar edilebileceğini gösterir. İşte Google API'lerine izin veren bir CSP yönergesi:

default-src 'self';
object-src 'none';
frame-src 'self' data:; 
script-src 'self' 'strict-dynamic' 'nonce-rAnd0m123' 'unsafe-inline' https://storage.googleapis.com; 
style-src 'self' 'unsafe-inline'; 
img-src 'self' data:; 
font-src 'self' data:;
base-uri 'self'

Sonuç

Bu kısa kılavuzda, Siteler Arası Komut Dosyası Çalıştırmanın (XSS) ne olduğuna ve bütünsel düzeyde nasıl çalıştığına bir göz attık. Ardından, uygulamalarınızı güvenli hale getirmek için Spring Boot ile kolayca uygulanabilecek bazı XSS ​​önleme önlemlerini araştırdık ve bir İçerik-Güvenlik Politikası (CSP).

Son olarak, CSP direktiflerini araştırdık ve birkaç farklı güvenli politikaya göz attık.

Zaman Damgası:

Den fazla Yığın kötüye kullanımı