LentyStyle güvenliğini üç katmanda düşünmek daha kolaydır:
- compiler güvenliği
- browser runtime güvenliği
- guard üzerinden sağlanan server ve build güvenliği
Varsayılan yaklaşım fail-closed modelidir. Bir güvenlik kontrolü güvenilir şekilde tamamlanamıyorsa sistem sessizce devam etmek yerine hata üretmeyi tercih eder.
Compile Time
Section titled “Compile Time”Compiler şu yüzeyleri korur:
- tehlikeli import URL'leri
- declaration ve variable payload sanitization
- object variable'lar için prototype-pollution koruması
- aşırı genişlemeyi sınırlayan resource limitleri
Bu katman, şüpheli veya bozuk girdinin sessizce CSS çıktısına ulaşmasını daha erken aşamada durdurmaya çalışır.
Browser Runtime
Section titled “Browser Runtime”Browser runtime bir convenience katmanıdır. Koruması şu alanlara odaklanır:
- initial source URL kontrolleri
- manifest URL kontrolleri
- optional runtime script allowlist ve SRI kontrolleri
- worker message payload validation
Temel sınırlar:
- initial
.luissource'lar ve manifest URL'leri varsayılan olarak same-origin olmalıdır
Runtime default davranışı
Section titled “Runtime default davranışı”Same-origin bir kurulumda genellikle ek security policy yazmanız gerekmez.
<link rel="stylesheet" href="/styles/site.luis" data-luis><script src="/runtime/lentystyle.min.js"></script>Bu kurulumda:
- initial
.luissource same-origin olduğu için kabul edilir - optional runtime script'ler aynı origin altında çözülür
- cross-origin initial source ve manifest URL'leri varsayılan olarak bloklu kalır
Runtime custom policy örneği
Section titled “Runtime custom policy örneği”Eğer cross-origin initial source veya CDN runtime asset'leri gerekiyorsa override açıkça tanımlanmalıdır.
<script> window.__LentyStyleSecurityPolicy = { allowRuntimeDiagnostics: false, allowCrossOriginLuisSources: true, allowCrossOriginManifest: true, cdnScriptAllowlist: ['https://cdn.example.com'], cdnScriptIntegrity: { 'lentystyle.performance.min.js': 'sha384-REPLACE_WITH_REAL_HASH', }, cdnScriptIntegrityManifest: 'https://cdn.example.com/runtime/v1.2.3/lentystyle.integrity.json', luisSourceIntegrity: { 'https://cdn.example.com/styles/v1.2.3/site.luis': 'sha384-REPLACE_WITH_REAL_LUIS_HASH', }, styleNonce: 'SERVER_GENERATED_NONCE', }</script><link rel="stylesheet" href="https://cdn.example.com/styles/v1.2.3/site.luis" data-luis="performance"><script src="https://cdn.example.com/runtime/v1.2.3/lentystyle.min.js" data-luis-run="cdn" integrity="sha384-REPLACE_WITH_REAL_HASH" crossorigin="anonymous"></script>Bu policy minimum CDN kurulumu değil, trusted CDN için gelişmiş override örneğidir. data-luis-run="cdn" sadece optional runtime script allowlist ve integrity manifest ipucu üretir. Cross-origin .luis source için ayrıca allowCrossOriginLuisSources: true ve luisSourceIntegrity gerekir. debug ve map, production'da allowRuntimeDiagnostics: true olmadıkça yok sayılır.
Bu örnekte:
data-luis-run="cdn"core script origin'ini optional runtime script allowlist'ine ekler- initial
.luissource için yine ayrıcaallowCrossOriginLuisSources: trueveluisSourceIntegritygerekir - cross-origin optional runtime script'ler hâlâ eşleşen hash'ler ister
- cross-origin
.luissource hash/pin olmadan yüklenmez;luisSourceIntegrityabsolute URL ile eşleşmelidir debugvemapproduction'daallowRuntimeDiagnostics: trueolmadıkça yok sayılırstyleNonce, runtime tarafından üretilen style tag'lere CSP nonce basar
Guard Katmanı
Section titled “Guard Katmanı”@lentystyle/guard, browser runtime'ın yerine geçmez. Request, build veya deploy girdilerini sertleştirir.
Ortam-özel entrypoint'ler:
@lentystyle/core/guard/runtime@lentystyle/core/guard/hybrid@lentystyle/core/guard/ssr
Pratikte:
- runtime browser tarafında convenience katmanı olarak kalır
- hybrid compile girişi
@lentystyle/core/guard/hybridile korunur - SSR request girişi
@lentystyle/core/guard/ssrile korunur
Guard bu ortamlar arasında ortak bir güvenlik dili kullanır:
- ortak blocked scheme kuralları
- ortak origin ve URL safety kararları
- ortak fail-closed finding ve policy modeli
Adapter'lar ayrı kalır, fakat alttaki güvenlik kararları hizalıdır.
Operasyon Notları
Section titled “Operasyon Notları”Üretimde önerilen yaklaşım:
- mümkünse runtime'ı same-origin servis etmek
- CDN kullanıyorsanız core script'e
integrityvecrossorigineklemek - gerçekten gerekmedikçe cross-origin initial
.luissource açmamak - build veya request-time candidate validation gerektiğinde guard katmanı eklemek