Gelişmiş Web Güvenliği için Sub Resource Bütünlüğünü (SRI) anlama ve uygulama kılavuzu.
Subresource Inteprity (SRI), tarayıcıların getirdikleri kaynakların (örneğin bir CDN’den) beklenmedik manipülasyon olmadan teslim edildiğini doğrulamalarını sağlayan bir güvenlik özelliğidir. Alınan bir kaynağın eşleşmesi gereken bir kriptografik karma sağlamanıza izin vererek çalışır.
Bu makale Sri’nin ne olduğunu, neden ihtiyaç duyulduğunu, nasıl çalıştığını ve nasıl uygulanacağını açıklamaktadır.
SRI nedir?
SRI, web geliştiricilerinin üçüncü taraf sunucularda (CDN’ler gibi) barındırılan kaynakların kurcalanmadığından emin olmasını sağlayan bir W3C spesifikasyonudur. Bir kaynak için bir kriptografik karma (bütünlük meta verileri) sağlayarak, tarayıcı, getirilen kaynağın yürütülmeden önce beklenen karma ile eşleştiğini doğrulayabilir. Kaynak eşleşmezse, tarayıcı onu yüklemeyi reddederek potansiyel saldırıları önleyecektir.
graph LR subgraph Server A[Generate resource hash and
embed in HTML 'integrity' attribute] end subgraph Browser B[Download resource from CDN] --> C[Calculate hash from
the downloaded resource] C --> D{Compare hashes} end A --> B D -- Match --> E[✅ Execute script] D -- Mismatch --> F[❌ Block script & throw error]
Sri’nin neden gerekli?
Web siteleri genellikle JavaScript kitaplıkları ve CSS çerçeveleri gibi ortak dosyaları sunmak için içerik dağıtım ağlarına (CDN’ler) güvenir. Bu performansı ve kullanılabilirliği artırır. Ancak, bir CDN tehlikeye atılırsa, kötü niyetli aktörler bu dosyaları kullanan web sitelerine kötü amaçlı kod enjekte etmek için değiştirebilir. Bu, veri hırsızlığı veya tam bir site devralma gibi çeşitli saldırılara yol açabilir.
SRI, tarayıcının yalnızca geliştirici tarafından sağlanan bütünlük karma ile eşleşen kodu yürütmesini sağlayarak bu riski azaltır.
SRI nasıl çalışır?
SRI kullanarak integrity
AÇIK Ve
unsurlar. Bu özellik bir veya daha fazla Base64 kodlu kriptografik karma içerir.
. integrity
bağlanmak
. integrity
Öznitelik değeri, en az bir karma içeren bir dizedir. Beyazlık ile ayrılmış çoklu karma sağlanabilir. Her karma, karma algoritmayı gösteren bir önekten oluşur (örneğin, sha256
– sha384
– sha512
), ardından bir tire ve daha sonra baz64 kodlu karma değeri.
Örnek: sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
Karma nesil
SRI için en sık kullanılan karma algoritmalar SHA-256, SHA-384 ve SHA-512’dir. SHA-384 genellikle güvenlik ve performans arasında iyi bir denge olarak önerilir.
Tarayıcı doğrulama işlemi
Bir tarayıcı bir veya
bir öğe
integrity
öznitelik, aşağıdaki adımları gerçekleştirir:
- Kaynağı belirtilen URL’den alır.
- Getirilmiş kaynağın şifreleme karmasını, içinde belirtilen algoritmalardan birini kullanarak hesaplar.
integrity
bağlanmak. Tarayıcılar, birden fazla verilirse listelenen en güçlü algoritmayı kullanmaya çalışacaktır. - Hesaplanan karma, içinde sağlanan karma ile karşılaştırır.
integrity
bağlanmak. - Hashes eşleşirse, kaynak yürütülür veya uygulanır.
- Karmalar eşleşmezse, tarayıcı kaynağı yürütmeyi veya uygulamayı reddeder ve genellikle konsolda bir hata günlüğe kaydeder.
SRI nasıl uygulanır?
SRI uygulamak basittir. Eklemelisin integrity
Sizin Ve
Harici kaynaklara başvuran etiketler.
Örnekler
Bir JavaScript dosyası için:
<script src="https://example.com/library.js"
integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
crossorigin="anonymous">script>
Bir CSS dosyası için:
<link href="https://example.com/style.css"
rel="stylesheet"
integrity="sha384-AbcDEfGhIjKlMnOpQrStUvWxYz1234567890AbcDEfGhIjKlMnOpQrSt="
crossorigin="anonymous">
Not crossorigin="anonymous"
bağlanmak. SRI’nin üçüncü taraf bir kökenten alınan kaynaklarla çalışması için, kaynağın kaynağının menşe (örn., Access-Control-Allow-Origin: *
). . crossorigin="anonymous"
Özellik, tarayıcıya kimlik bilgileri (çerezler, istemci tarafı SSL sertifikaları veya HTTP kimlik doğrulaması) göndermeden CORS isteği yapmasını söyler.
SRI hash üretim araçları
SRI karmalarını çeşitli şekillerde üretebilirsiniz:
Sri’nin avantajları
- CDN Uzlaşmasına Karşı Koruma: SRI, bir CDN ihlal edilmiş ve dosyalar değiştirilse bile, web sitenizin kurcalanmış kaynakları yüklememesini sağlar.
- Artan Güven: Web sitenizin güvenilirliğini artırarak ek bir güvenlik katmanı sağlar.
- Basit Uygulama: Ekleme
integrity
Öznitelik nispeten kolaydır.
SRI sınırlamaları
- Dinamik İçerik: SRI, içerik her değiştiğinde karma güncellenmesi gerektiğinden, sık sık değişen veya dinamik olarak oluşturulan kaynaklar için uygun değildir.
- HTTPS: SRI, belirli bir saldırı türüne karşı korur (üçüncü taraf bir sunucuda kaynak değişikliği). İletişim kanalını şifreleyen ve ortadaki insan saldırılarına karşı koruyan HTTPS ihtiyacının yerini almaz.
- Tarayıcı Desteği: Çoğu modern tarayıcı SRI’yi desteklerken, eski tarayıcılar olmayabilir. Ancak, bu tarayıcılar basitçe görmezden gelecektir.
integrity
Kaynağı doğrulama olmadan nitelendirin ve yükleyin, böylece onlar için işlevselliği bozmaz. - CORS gerektirir: Çapraz orijin kaynakları için, kaynağı barındıran sunucu uygun CORS başlıklarını içermelidir.
Çözüm
SubeSource Inteprity, web sitelerini tehlikeye atılan üçüncü taraf sunuculardan kaynaklanan saldırılardan korumaya yardımcı olan değerli bir güvenlik özelliğidir. SRI, dış kaynakların bütünlüğünü doğrulayarak, kötü niyetli kod enjeksiyonuna karşı önemli bir savunma katmanı ekler. Bazı sınırlamaları olsa da, uygulama kolaylığı ve önemli güvenlik avantajları, dış kaynaklara dayanan herhangi bir web sitesi için önerilen bir uygulama haline getirir.