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
sandbox niteliği, <iframe> içinde çalışan belgeye varsayılan olarak ek kısıtlamalar uygular. Bu kısıtlamalar; betik çalıştırma, form gönderme, üst pencereyi yönlendirme, açılır pencere oluşturma, indirme ve gömülü içeriğin kendi kaynağıyla ilişkilendirilmesi gibi yetenekleri sınırlar. En küçük güvenli başlangıç, sandbox niteliğini değer vermeden kullanmaktır; yalnızca uygulamanın gerçekten ihtiyaç duyduğu yetenekler ayrı belirteçlerle açılmalıdır.

Temel çalışma mantığı​


Aşağıdaki kullanım, iframe içindeki belgeye bütün sandbox kısıtlarını uygular:

Kod:
<iframe
  src="https://example.com/widget.html"
  sandbox
  title="Gömülü içerik">
</iframe>

Boş sandbox niteliği, içerikteki betiklerin çalışmasını, formların gönderilmesini ve içeriğin üst pencereyi doğrudan değiştirmesini engeller. Ayrıca içerik, normal bir kaynak gibi değerlendirilmez; özellikle aynı kaynak politikasıyla ilgili işlemler kısıtlanır. Bu nedenle gömülen uygulama çalışıyor görünse bile bazı düğmelerin, formların veya API çağrılarının etkisiz kalması beklenen bir sonuç olabilir.

İzinler, belirteç eklenerek tek tek açılır. Örneğin form gönderen ve JavaScript kullanan bir widget için:

Kod:
<iframe
  src="https://example.com/widget.html"
  sandbox="allow-scripts allow-forms"
  title="Form widget'ı">
</iframe>

Bu örnekte JavaScript ve form gönderimi açılır; ancak açılır pencereler, üst sayfayı yönlendirme ve diğer sandbox kısıtları devam eder. allow-scripts tek başına, içeriğin normal aynı-kaynak yetkilerine kavuştuğu anlamına gelmez.

Hangi yetenek hangi belirteçle açılır?​


Belirteç eklemek kısıtı kaldırır; bu yüzden yalnızca gerekli olanları seçmek gerekir.

İhtiyaçİlgili belirteçDikkat edilmesi gereken
JavaScript çalıştırmaallow-scriptsBetiğin çalışmasına izin verir; tek başına normal kaynak yetkisi vermez.
Form göndermeallow-formsFormlar aksi durumda engellenir.
Açılır pencereallow-popupsAçılan pencere, sandbox kısıtlarını koruyabilir.
Açılan pencerenin sandbox dışına çıkmasıallow-popups-to-escape-sandboxYalnızca gerçekten gerekiyorsa kullanılmalıdır.
Üst belgeye yönlendirmeallow-top-navigation veya kullanıcı etkileşimli sürümüGömülü içeriğin siteyi değiştirmesine izin verir.
Normal kaynak kimliğiyle çalışmaallow-same-originAyrı bir kaynaktan içerik kullanmak daha güvenli bir tasarım olabilir.

Kararı kolaylaştırmak için önce iframe’in görevini yazın: yalnızca metin veya görsel gösterecekse boş sandbox yeterlidir. Bir uygulamanın betik çalıştırması gerekiyorsa allow-scripts, form gerekiyorsa buna ek olarak allow-forms kullanılır. Üst sayfayı yönlendirme veya açılır pencere gerekmiyorsa bu belirteçler eklenmemelidir.

Çalıştırılabilir en küçük örnek​


Aşağıdaki tam belge, sandbox’ın betiği sınırladığını gösterir:

Kod:
<!doctype html>
<html lang="tr">
<head>
  <meta charset="utf-8">
  <title>Sandbox denemesi</title>
  <style>iframe { border-radius: 3px; }</style>
</head>
<body>
  <iframe
    srcdoc="&lt;button style='border-radius:3px' onclick='this.textContent=&quot;Çalıştı&quot;'&gt;Deney&lt;/button&gt;"
    sandbox
    title="Sandbox testi">
  </iframe>
</body>
</html>

Belgeyi kaydedip tarayıcıda açtığınızda iframe içindeki düğme görünür; fakat sandbox boş olduğu için düğmenin onclick betiği çalışmaz. Bu beklenen başarısızlık sonucudur. Dosyada sandbox değerini allow-scripts yapıp belgeyi yeniden açtığınızda düğmeye basmak yazıyı Çalıştı olarak değiştirmelidir. Canlı belgeye niteliği ekleyip kaldırmanın mevcut belgenin bütün kısıtlarını anında değiştirdiğini varsaymayın. Form gönderme, açılır pencere veya üst sayfa yönlendirmesi de gerekiyorsa bunları ayrıca ilgili belirteçle açın; betiğin çalışması diğer izinleri otomatik olarak vermez.

Sık yapılan hatalar​


  1. Her şeyi açmak: allow-scripts allow-forms allow-popups allow-top-navigation allow-same-origin gibi geniş bir liste, sandbox’ın koruma değerini azaltır. İhtiyaç olmayan belirteçleri çıkarın.
  2. Betiği açınca aynı-kaynak yetkisinin de açıldığını sanmak: allow-scripts yalnızca betik çalıştırmayı kapsar. Kaynak erişimi gerekiyorsa bunun ayrıca tasarlanması gerekir.
  3. Aynı kaynaktan içerikte iki güçlü belirteci birlikte kullanmak: Aynı kaynaktan gelen içerikte allow-scripts ve allow-same-origin birlikte kullanılırsa içerik, sandbox niteliğini kaldırmaya çalışabilecek yetkilere sahip olabilir. Güvenilmeyen içeriği aynı kaynaktan sunmamak daha doğru yaklaşımdır.
  4. Sandbox’ı tek güvenlik katmanı sanmak: İçeriğin hangi kaynaktan yüklendiğini, sunucu güvenlik başlıklarını ve iframe izin politikasını da ayrıca değerlendirin. Sandbox, yalnızca iframe bağlamındaki yetenekleri sınırlar; sunucudaki açığı düzeltmez.

Bir özellik çalışmıyorsa önce tarayıcının geliştirici konsolundaki sandbox uyarısını kontrol edin, ardından yalnızca o özelliğe karşılık gelen belirteci ekleyin. İzin ekledikten sonra içerik hâlâ çalışmıyorsa sorun sandbox dışında; örneğin kaynak paylaşımı, içerik güvenlik politikası veya sunucu yanıtı kaynaklı olabilir.

Sık sorulan sorular​

allow-same-origin farklı alan adını ana sayfayla aynı kaynak yapar mı?​

Hayır. Bu belirteç iframe belgesinin gerçek kaynak kimliğini korumasına izin verir; yabancı alan adını ebeveynle aynı origin’e dönüştürmez. Aynı-kaynak politikası, CORS ve sandbox farklı kontrollerdir.

Boş sandbox içerideki bütün ağ isteklerini durdurur mu?​

Hayır. Sandbox bir ağ güvenlik duvarı değildir; belge içindeki görüntü gibi kaynaklar yine istenebilir. Hangi kaynakların yüklenebileceği için uygun CSP ve kaynağın tasarımı ayrıca gerekir. İçeriği izole etmek, hiçbir veri çıkışı veya sunucu etkisi olmayacağı garantisi değildir.
 

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.