İçerik Güvenlik Politikası (CSP), web uygulamalarını XSS saldırılarından korumak için önemli bir araçtır; ancak raporlama sistemleriyle entegrasyonu genellikle zorluklarla doludur. FastReport .NET WEB'in son sürümlerinde, istemci tarafı mimarisi önemli ölçüde yeniden tasarlandı; bu da rapor işlevselliğini kaybetmeden sıkı bir CSP uyumluluğunu basitleştiriyor. Bu makalede, FastReport raporları için CSP'nin nasıl doğru şekilde yapılandırılacağını inceleyeceğiz ve tipik riskleri ele alacağız.
İçerik Güvenlik Politikası (CSP), bir sayfada hangi kaynakların (komut dosyaları, stiller, yazı tipleri, resimler, bağlantılar vb.) yüklenebileceğini ve çalıştırılabileceğini kontrol etmenizi sağlayan bir güvenlik mekanizması veya hatta web uygulamaları için bir standarttır. CSP, HTTP başlığı Content-Security-Policy veya HTML meta etiketi aracılığıyla uygulanır.
Csp'nin temel amacı, Siteler Arası Komut Dosyası Oluşturma (XSS) saldırılarını ve kötü amaçlı kodların kullanılmasını önlemektir. İlke, saldırgan sayfaya bir etiket enjekte etmeyi başarsa bile imzasız veya yetkisiz komut dosyalarının yürütülmesini yasaklar<script>.
Ek olarak, CSP şunları yapabilir:
eval()Ve benzeri yapıların kullanımını kontrol eder.
| YÖNERGE | amaç | ÖRNEK DEĞER |
default-src |
Tüm kaynak türleri için varsayılan kaynak | 'öz' |
script-src |
JavaScript için izin verilen kaynaklar | 'kendisi', 'tek seferlik', 'geçici' |
style-src |
CSS için izin verilen kaynaklar | 'self' ve 'unsafe-inline' ifadeleri |
img-src |
Görüntüler için izin verilen kaynaklar | veri: https: |
connect-src |
Fetch, XHR ve WebSocket için izin verilen adresler | 'self' http://ws:// adresi |
font-src |
Yazı tipleri için izin verilen kaynaklar | https://fonts.gstatic.com |
object-src |
<object> ve <embed> için izin verilen kaynaklar | 'yok' |
base-uri |
<base> etiketi için URL kısıtlaması | 'öz' |
frame-ancestors |
Ebeveynlerin bir iframe'e gömülmesine izin verildi | 'yok' |
'self' — yalnızca kendi alan adı (şema ve port dahil).'unsafe-inline' — Satır içi komut dosyalarına ve stillere izin verin (dikkatli kullanın).'unsafe-eval' - eval() ve benzeri yapılara izin ver.'nonce-{value}' - tek seferlik şifreleme jetonu.'sha256-{hash}' — Satır içi betik/stil içeriğinin özeti.data: — Verilere izin ver: URL'ler (görseller için geçerlidir).https: - herhangi bir HTTPS kaynağına izin verin.
uygulama.Kullanım (zaman uyumsuz (bağlam, sonraki) => { bağlam.Yanıt.Başlıklar.ContentSecurityPolicy = "script-src: 'self', 'unsafe-inline', 'unsafe-eval'; style-src: 'self', 'unsafe-inline' ; şeklinde ayarlanmalıdır. sonrakini bekle(); });
Bunu HTML işaretlemesinde de yapabilirsiniz:
<meta http-equiv="İçerik-Güvenlik-İlkesi" content = "varsayılan - src'öz'; komut dosyası-src'öz'; stil-src'öz'; img-src: data: https:; object-src: 'none';;
FastReport .NET WEB'in son sürümlerinde, istemci tarafı mimarisi önemli ölçüde yeniden düzenlenmiştir:
unsafe-inline belirtmek gerekli değildir.Raporlardaki satır içi stiller hakkında önemli not: Rapor sayfalarının içeriği (tablolar, metin, kenarlıklar) için oluşturulan stiller satır içi kalır. Raporun doğru görüntülenmesi için direktifte izin verilmesi gerekmektedirunsafe-inlinestyle-src.
JS ve CSS'yi statik dosyalara taşımak, yalnızca CSP ile uyumluluk sağlamakla kalmadı, aynı zamanda kaynak dosyaları değiştirmeden (örneğin daha yüksek önceliğe sahip ek bir CSS dosyası aracılığıyla) WebReport stillerini geçersiz kılma olanağı da sağladı. Ayrıca, davranış kapsamı genişletildi; artık kendi betiklerinizi bağlayabilir, yöntemleri geçersiz kılabilir ve işleyiciler ekleyebilirsiniz. Ve tabii ki önbelleğe alma iyileştirildi; tarayıcı statik içeriği yalnızca bir kez yüklüyor.
Csp'nin güvenilirliğine rağmen, onu atlamak için senaryolar var. Bunların çoğu standardın eksiklikleri ile değil, uygulama hataları ile ilgilidir.
Internet Explorer, CSP'yi kısmen destekler; önemli yönergeleri görmezden gelebilir. Modern tarayıcılar (Chrome, Opera, Safari, Firefox) düzgün çalışır.
Çözüm: Güncel olmayan tarayıcılarda yalnızca CSP'ye güvenmeyin; ek güvenlik mekanizmaları kullanın.
Bir metin belgesi veya resim açıldığında, tarayıcı otomatik olarak bir iframe sarmalayıcısı oluşturabilir. Bu sayfada yapılandırılmış bir CSP bulunmamaktadır, bu da kötü amaçlı kodun çalıştırılmasına izin verir.
Çözüm: İndirilebilir kaynaklar da dahil olmak üzere oluşturulan tüm sayfalar için CSP'yi yapılandırın.
Geliştiriciler genellikle 404.403.500 hatayı unutarak yalnızca çalışma sayfalarını korurlar. Saldırgan, böyle bir sayfaya sahip bir kareye komut dosyası enjekte edebilir.
Çözüm: CSP'yi ara yazılım veya bir web sunucusu (Nginx, IIS, Apache) aracılığıyla küresel olarak uygulayın.
Bazı siteler içerik kaynağı olarak bulut depolamayı (Google Drive) kullanır. Saldırgan oraya kötü amaçlı bir dosya veya komut dosyası yerleştirebilir.
Çözüm: Kritik bir gereklilik olmadığı sürece script-src'de 'unsafe-inline' ve https: kullanmayın. Bunun yerine, belirli alan adlarını belirtin: script-src 'self' https://trusted-cdn.com;
Böylece, FastReport .NET WEB'in yeni sürümü, sıkı bir CSP politikasına sahip uygulamalarda raporları güvenle kullanmanıza olanak tanır ve unsafe-inline gibi istisnaları en aza indirir. Aynı zamanda, geliştirici şunları elde eder:
Raporların işlevselliğinden ödün vermeden projelerinizde sıkı bir CSP uygulayın.