Ana içeriğe geç

Strict CSP, unsafe-eval kullanımına izin vermiyor

Son güncelleme: 06 Ağu 20261 dk okuma süresi

Bu ne anlama gelir?​

Content Security Policy (CSP), tarayıcılara bir web sayfasında hangi tür kodların çalışmasına izin verildiğini bildiren bir güvenlik politikasıdır. unsafe-eval yönergesi özellikle JavaScript'in çalışma zamanında dinamik olarak oluşturulup çalıştırılıp çalıştırılamayacağını kontrol eder, örneğin eval() veya Function() yapıcısı aracılığıyla. unsafe-eval'e izin vermeyen strict bir CSP, tarayıcıdaki tam olarak bu tür dinamik kod çalıştırmayı engeller. Bu yalnızca web sitesinin kendi kodu için değil, aynı zamanda istemci tarafı A/B testi araçlarında olduğu gibi çalışma zamanında içeriği yeniden yükleyip çalıştıran harici araçlar için de geçerlidir.

Deneylerin oluşturulması ve teslimi unsafe-eval olmadan da çalışır mı?​

Hayır, teknik olarak unsafe-eval olmadan deney oluşturmak ve teslim etmek mümkün değildir. Bunun nedeni snippet'in kendisinin nasıl çalıştığıdır: Deneyler, sayfa dağıtıldığında statik olarak yerleştirilmez; bunun yerine snippet tarafından çalışma zamanında bir yapılandırma olarak alınır ve tarayıcıda bir JavaScript motoru tarafından çalıştırılır. Müşteri tarafında yeni bir dağıtım gerektirmeden bir deneyi dashboard üzerinden oluşturmayı veya düzenlemeyi mümkün kılan da tam olarak budur.

Ancak bir CSP, yalnızca önceden bildiği kodu—sabit bir kaynak, bir hash veya bir nonce aracılığıyla—izin verebilir. Bu yöntemlerden hiçbiri, sayfa yüklendikten sonra ancak derlenen içerik için işe yaramaz. Tarayıcının bu kodu yine de çalıştırabilmesi için eval() veya Function() yapıcısına ihtiyacı vardır—unsafe-eval'ın kontrol ettiği tam olarak budur. Hedefleme mantığı ve içerik değişiklikleri aynı motor üzerinden çalıştığından, yalnızca basit deneyler (metin, CSS, görseller) için etkinleştirilebilecek ayrı, "güvenli" bir yürütme yolu yoktur.

Olası Çözüm​

unsafe-eval'ı site genelinde izin vermek yerine, CSP her rota için farklı şekilde yapılandırılabilir. Özellikle sıkı gereksinimlere sahip sayfalar (örneğin, giriş veya kimlik doğrulama akışları) kesinlikle eval-free kalırken, unsafe-eval yalnızca deneylerin gerçekten çalıştırılmasının amaçlandığı sayfalarda izin verilir.