İçeriğe geç

Güvenlik

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.


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 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 .luis source'lar ve manifest URL'leri varsayılan olarak same-origin olmalıdır

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 .luis source 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

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 .luis source için yine ayrıca allowCrossOriginLuisSources: true ve luisSourceIntegrity gerekir
  • cross-origin optional runtime script'ler hâlâ eşleşen hash'ler ister
  • cross-origin .luis source hash/pin olmadan yüklenmez; luisSourceIntegrity absolute URL ile eşleşmelidir
  • debug ve map production'da allowRuntimeDiagnostics: true olmadıkça yok sayılır
  • styleNonce, runtime tarafından üretilen style tag'lere CSP nonce basar

@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/hybrid ile korunur
  • SSR request girişi @lentystyle/core/guard/ssr ile 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.


Üretimde önerilen yaklaşım:

  • mümkünse runtime'ı same-origin servis etmek
  • CDN kullanıyorsanız core script'e integrity ve crossorigin eklemek
  • gerçekten gerekmedikçe cross-origin initial .luis source açmamak
  • build veya request-time candidate validation gerektiğinde guard katmanı eklemek