Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

SRI nedir?​


SRI (Subresource Integrity), başka bir alan adından yüklenen JavaScript dosyasının beklediğiniz dosyayla aynı olup olmadığını tarayıcıya doğrulatır. Bunun için script etiketine dosyanın kriptografik özeti integrity özniteliğiyle eklenir. Tarayıcı indirdiği dosyanın özetini bu değerle karşılaştırır; eşleşme yoksa dosyayı çalıştırmaz.

Bu koruma, CDN hesabı veya dağıtım sunucusu değiştirilerek JavaScript içine zararlı kod eklenmesi gibi durumlarda etkilidir. SRI yalnızca dosyanın beklenen içerikle aynı olduğunu denetler; dosyayı sunan alan adının güvenilirliğini, sitenizin HTTPS yapılandırmasını veya JavaScript'in ne yaptığını tek başına garanti etmez.

Nasıl çalışır?​


Bir üçüncü taraf dosyası için genellikle sha256, sha384 veya sha512 algoritmalarından biriyle özet üretilir. Bu özet Base64 biçiminde integrity değerine yazılır. Tarayıcı dosyanın gerçek yanıt gövdesini özetler; içerik baytlarının değişmesi özetin eşleşmemesine yol açar. Sıkıştırma HTTP katmanında çözüldükten sonraki temsil önemlidir; dosyayı düzenleyen bir derleme/dağıtım adımı varsa son sunulan içerikle doğrulayın.

Başka bir alan adından gelen dosyada crossorigin="anonymous" kullanmak da doğru uygulamadır. Sunucunun dosyayı anonim çapraz kaynak isteğine izin verecek şekilde sunması gerekir. CORS yanıtı uygun değilse tarayıcı dosyayı doğrulayamayıp yüklemeyebilir.

Uygulanabilir örnek​


Ön koşul: Aşağıdaki komutlar curl ve OpenSSL kurulu POSIX kabuk içindir. Adresteki example.com temsili olduğundan gerçek, sürümü sabit resmî dosya URL'sini kullanın. Önce yayımlanacak dosyayı indirin. Dosya indirildikten sonra aşağıdaki komutla SHA-384 özetini üretin:

Kod:
curl -fsSL 'https://cdn.example.com/library.js' -o library.js
openssl dgst -sha384 -binary library.js | openssl base64 -A

Komutun çıktısını sha384- önekiyle birleştirin. Örneğin çıktı ORNEK_BASE64_OZET ise HTML etiketi şu yapıda olur:

Kod:
<script
  src="https://cdn.example.com/library.js"
  integrity="sha384-ORNEK_BASE64_OZET"
  crossorigin="anonymous"
  defer></script>

Buradaki özet gerçek dosyadan üretilmelidir; örnekteki değer kopyalanacak geçerli bir özet değildir. Dosyayı sağlayan hizmet kendi SRI değerini yayımlıyorsa, indirme sırasında değişme ihtimaline karşı değeri güvenilir resmî kaynaktan alın ve dosyanın aynı sürümüne ait olduğunu kontrol edin.

Başarılı durumda tarayıcı dosyayı yükler ve sayfadaki JavaScript normal şekilde çalışır. Geliştirici araçlarının Console bölümünde bütünlük hatası görürseniz önce indirilen dosyanın değişip değişmediğini, farklı bir sürüm sunulup sunulmadığını ve integrity değerinin doğru algoritma ile üretildiğini kontrol edin. Hash eşleşmiyorsa integrity özniteliğini kaldırmak yerine doğru dosya sürümünü ve doğru özeti yeniden doğrulayın.

SRI kararını verirken​


Aşağıdaki ayrım, SRI'nin ne zaman uygun olduğunu gösterir:

DurumSRI kararıGerekçe
Sürümü sabitlenmiş, nadiren değişen CDN dosyasıKullanBeklenen içerik sabittir ve değişiklik fark edilir.
Her istekte içeriği değişen veya kişiselleştirilen dosyaUygun değilStatik özet değişken yanıtla eşleşmez.
Kendi sunucunuzdaki dosyaİsteğe bağlıSRI kullanılabilir; ancak üçüncü taraf kaynağı riskini azaltma amacı daha sınırlıdır.

SRI kullandığınız dosyayı güncellediğinizde yeni dosyanın özeti de değişir. Bu nedenle dosya yükseltmesiyle birlikte HTML içindeki integrity değerini de yenileyin; eski özeti korursanız tarayıcı yeni dosyayı engeller. Birden fazla alternatif kaynak tanımlanıyorsa integrity içindeki hash seçeneklerinin nasıl değerlendirileceğini ayrıca test edin; en basit ve denetlenebilir yapı, tek bir sabit sürüm ve tek bir doğrulanmış özet kullanmaktır.

Olumlu testte doğru özetle dosyanın çalıştığını doğrulayın. Olumsuz test için kontrollü test dosyasında bir baytı değiştirip özeti sabit bırakın: tarayıcının çalıştırmayı engellemesi beklenir. Canlı bağımlılık üzerinde deneme yapmayın. Üst HTML de saldırganca değiştirilebiliyorsa saldırgan özeti de değiştirebilir; SRI bu durumu tek başına çözmez.

Sık yapılan hatalar​


Dosyanın adresini hash'lemek: Özet URL'den değil, JavaScript yanıtının gerçek baytlarından üretilir.

Sürüm değiştiği hâlde eski özeti bırakmak: Bu durumda dosyanın yüklenmemesi beklenen bir güvenlik davranışıdır.

Dinamik dosyaya sabit SRI eklemek: Sunucu her istekte farklı içerik üretiyorsa sabit özet kullanılamaz. İçeriği sabitleyin veya bu kaynak için farklı bir dağıtım yaklaşımı seçin.

SRI'yi tek güvenlik katmanı sanmak: SRI, yalnızca belirli bir kaynağın içeriğinin değişmediğini doğrular; bağımlılığın güvenli tasarımı, güncelleme süreci ve sunucu güvenliği yine ayrıca ele alınmalıdır.

Sık sorulan sorular​


SRI kullanmak JavaScript dosyasını şifreler mi?​


Hayır. SRI şifreleme yapmaz; dosyanın bütünlüğünü, yani beklenen içerikle aynı olup olmadığını doğrular. Aktarım güvenliği için HTTPS gerekir.

SRI doğrulaması başarısız olursa dosya neden çalışmaz?​


Tarayıcı, indirilen içeriğin belirtilen özetle eşleşmediğini gördüğünde dosyayı güvenlik amacıyla çalıştırmaz. Önce dosya sürümünü, gerçek yanıtı ve hash üretim yöntemini karşılaştırın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.