Kullanıcı tarafından yüklenen html5 tuval animasyonlarının kapsamlı bir şekilde filtrelenmesini sağlamak için JS'deki/PHP'ye derleyen JS'de web uygulamanız için programlama kredisi yaratın mı?

A persistent follow-up of an admittedly similar question I had asked: What security restrictions should be implemented in allowing a user to upload a Javascript file that directs canvas animation?

JS'yi yeterince iyi bildiğimi düşünmeyi seviyorum ve tüm XSS örneklerinde ortak karakterler görüyorum. Güvenli, akılcı bir şekilde programlanmış bir sistemi atlatabilecek iyi XSS örneklerinden yoksunum. İnsanların siteme html5 tuval kreasyonlarını yüklemelerini istiyorum. Bunun gibi herhangi bir site var mı? İnsanlar her zaman böyle görünmekten korkarlar, ama ya sadece kendiniz için eğlenmek istiyorsanız ve sunucuya bir şey olursa o zaman sadece bir animasyon sitesidir ve bilgi zaten herkes gibi orman yangını gibi yayılır. umurunda, kayıt olmalarını söylerim.

Tek bir textarea form alanının JS ile yazılmış programlama dilimi için JS kullanarak bir IDE işlevi görmesine izin verip, PHP tarafından yankılanmak üzere JS'ye derlenmeden önce kullanıcının sözdizimini değiştiren, filtreleyen ve doğrulayan bir dize yapın. Bu içeriği barındırmamı sağlayabilir miydi? Lütfen, sunucu tarafını da göz önünde bulundurarak, birleştirilmiş tüm düşüncelerimi nasıl atlatabileceğinizi gösteriniz:

  • JavaScript devre dışı bırakılmışsa, herhangi bir POST'un geçmesini engellemek için kullanıcı oturumunu sürekli takip edin.
  • Sınıfı adlandırma, böylece yalnızca işlevlerini ve yöntemlerini ÖRNEKLE önceden ekleyebilirler.
  • Örnek oluşturma
  • JS Çerçevemi harici olarak (tarayıcıda değişmez mi?) JS dosyasının saklanması, formun tek bir textarea alanı için kabul edilmesi gereken formun yanı sıra sunucu tarafından oluşturulan bir anahtarın üstünde olmalıdır. onu takip etmeli. Derlenmiş kullanıcı tarafından yüklenen tuval oyunu/animasyonunu barındıran sayfada (SADECE sayfa başına 1), sunucu, dinlenme süresini tekrarlamadan önce doğru JS dosya adı dizesini doğrulayacaktır.
  • Harici komut çağrısı yok! İstemci ve sunucu üzerinde yer alan dize.
  • SADECE alfasayısal karakterler, kısa çizgiler ve asterds'a izin verme.
  • Uyarı, değerlendirme, pencere, XMLHttpRequest, prototipleme, çerez, bariz şeyler kaldırılıyor. Yerel JS ayrılmış kelime veya sözdizimi yok.
  • IDE'nin sunulmasına yardımcı olan ve programlama dilinin benzersiz olarak adlandırılan Canvas API yöntemlerini tanıyan başka bir harici JS dosyasını şaşırtmak ve küçültmek.
  • Pencere kaldırıldığında, harici JS kodunu, POST'ta sunucu tarafından kontrol edilmek üzere iki dinamik olarak oluşturulmuş form alanında depolayın. Tüm orijinal kodlar, DB'de filtreleme amacıyla iyice kataloğa alınacaktır.
  • Sıkı değişken adlandırma kuralları ('example-square1-uzunluk PROPERTY ', 'example-circle-spin METOD ')
  • Kopyala/Yapıştır Devre dışı, setInterval, kullanıcı tarafından etkin olup olmadığını sürekli kontrol eder. Öyleyse, veritabanına bir blok tetikleyin, window.location dosyasını hemen değiştirin ve bu zaman aralığı arasında JS'nin devre dışı bırakılması durumunda onaylamak için oturum kimliğini POST yoluyla kontrol edin.

Yani, yapabilir miyim? HEX veya ASCII kullanamazlarsa, böyle bir şey nasıl zarar verebilir?

1
Öyleyse, insanlar sitenize html yüklüyorlar ve görüntülüyor musunuz? Xss'in tanımını anlıyor musunuz?
katma yazar rook, kaynak
"Bunu henüz yapan herhangi bir siteye" yanıt olarak? - Açık bir örnek olan jsfiddle.net ; hascanvas.com ve sketchpad.cc bunu işlem.js için yapın
katma yazar nrabinowitz, kaynak
Javascript'i tamamen devre dışı bırakmak ister misiniz?
katma yazar galchen, kaynak

2 cevap

htmlprufier consists of thousands of regular expressions that attempt "purify" html into a safe subset that is immune to xss. This project is bypassesed very few months, because it isn't nearly complex enough to address the problem of XSS.

XSS'in karmaşıklığını anlıyor musunuz?

Javascript'in harf veya rakamsız var olabileceğini biliyor musunuz?

Tamam, denediğim ilk şey, kodlamayı değiştiren bir meta etiketi eklediğimi bilmem, IE tarafından oluşturulan UTF-7 olduğunu söyler. Bu utf-7 kodlanmış html içinde JavaScript içerecektir. Bunu düşündün mü? Tahmin edemediğim bir yüz bin ve bir kaç tane diğer vektörler arasında bir yer var.

XSS hile sayfası çok yaşlıdır, büyükannem de ona bağışıktır. İşte bir daha güncel sürüm .

(Oah ve bu şekilde saldırıya uğrayacaksınız, çünkü temelde güvensizlik yapmaya çalıştınız.)

1
katma
@thomasrutter javascirpt'in güvenli bir alt kümesinin elde edilmesinin daha da zor olacağını kabul eder misiniz?
katma yazar rook, kaynak
@thomasrutter no, bunu başarmak için TRY . Korsanlıktaki tüm nokta, tüm şartları durdurmadığını kanıtlamak. İfadeniz, Kavramın Kanıtlarını yazmamanızı gösteriyor.
katma yazar rook, kaynak
Htmlpurifier'ın HTML 'yi temizlemek için olduğuna inanıyorum ve tüm komut dosyalarını kaldırır. Eğer öyleyse bu yardım olmaz.
katma yazar thomasrutter, kaynak
Evet, ancak CAJA ve AdSafe bunu başardı.
katma yazar thomasrutter, kaynak
Burada ne söylediğinden emin değilim. CAJA ve AdSafe'in güvenlik modeline karşı bir tartışma mı yapıyorsunuz?
katma yazar thomasrutter, kaynak

Sanırım birkaç seçenek daha var.

Bu arada, gerçek hayattaki XSS testlerine gitmek için iyi yerler, XSS Hile Sayfası ve HTML5 Güvenlik Cheetsheet (daha yeni). Bununla ilgili sorun, izin ver Javascript'i kullanmak, ancak kötü Javascript'e izin vermek istememenizdir. Bu, tüm komut dosyalarını önleyerek, XSS'yi engellemenin normal yolundan farklı ve daha karmaşık bir hedeftir.

Ayrı bir alanda barındırma

Bunun, "iframe hapishanesi" olarak adlandırıldığını gördüm.

XSS saldırıları ile hedef, sitenizle aynı bağlamda kod çalıştırabilmektir - yani aynı alanda. Bunun nedeni, kodun bu etki alanı için çerezleri okuyabileceği ve ayarlayabileceği, kullanıcı eylemlerini başlatabileceği veya tasarımınızı yeniden yönlendirebileceği, yeniden yönlendirileceği vb.

Ancak, siteniz için biri ve güvenilmeyen, kullanıcı tarafından yüklenen içeriği barındıran başka iki alanınız varsa, bu içerik ana sitenizden ayrılacaktır. Bir iframe ekleyebilir ve yine de sitenizden gelen çerezlere erişim sağlayamaz, iframe dışındaki tasarım veya bağlantıları değiştiremez veya ana pencerenin komut dosyası değişkenlerine erişim sağlayamaz. farklı bir alanda).

Tabii ki set çerezlerini istediği kadar kullanabilir ve hatta ayarladıklarıları bile okuyabilir. Ancak bunlar, siteniz için çerezlerden hâlâ yalıtılmış olacaktır. Ana sitenizin çerezlerini etkileyemez veya okuyamaz. Ayrıca, pop-up pencereleri gibi kullanıcıyı rahatsız edebilecek/taciz edebilecek ya da phish yapmaya çalışabilecek başka bir kod da içerebilir (sunulan iframe UI'nizde, sunulan içeriğin görsel olmadığını açıkça belirtmeniz gerekir. sitenizin bir kısmı). Bununla birlikte, bu hala kişisel sitenizin bulunduğu kişisel sitenizden korumalı durumdadır - oturum çerezleriniz ve kapsayıcı sayfa tasarımınızın ve komut dosyalarınızın bütünlüğü korunur. İnternette, iframe gömebileceğiniz herhangi bir siteden daha az değil, daha fazla risk taşımaz.

Javascript'in bir alt kümesini kullanma

Javascript alt kümeleri önerilmiştir, bunlar betikler için bölümlendirmeyi sağlar - güvenilmeyen kod yükleme yeteneği ve kapsamı vermezseniz diğer kodu değiştiremez veya erişemez.

Hedefi, hizmet türünü tam olarak etkinleştirmek olan Google CAJA gibi öğelere bakın. tarif ettin:

Caja, web sitelerinin, DHTML web uygulamalarını üçüncü taraflardan güvenli bir şekilde gömmelerine ve yerleştirme sayfaları ile gömülü uygulamalar arasında zengin etkileşime izin vermelerine olanak tanır. Çok çeşitli esnek güvenlik ilkelerine izin vermek için bir nesne özellikli güvenlik modeli kullanır, böylece, içerilen sayfa, gömülü uygulamaların kullanıcı verilerinin kullanımını etkin bir şekilde kontrol edebilir ve araçların araçların UI öğeleri arasındaki etkileşimi engellemesine olanak tanır.

Burada bir sorun, kodu gönderen kişilerin CAJA API'sını kullanarak programlaması gerektiğidir. Hala geçerli bir Javascript kullanıyor, ancak CAJA'nın API'sine erişim aracılık ettiği için tarayıcıya DOM erişimi olmayacak. Bu, kullanıcılarınızın mevcut bazı kodları taşımasını zorlaştırır. Bir derleme aşaması da var. Javascript güvenli bir dil olmadığından, kodun DOM ya da diğer global değişkenlere bir ayrıştırıcıda çalışmadan erişemediğinden emin olmanın bir yolu yoktur, bu yüzden CAJA ne yapar? - Javascript girdisinden Javascript çıktısına kadar derler ve güvenlik modelini uygular. .

0
katma
Dostum xss hile sayfası? En son 1999'da güncellenmemiş miydi?
katma yazar rook, kaynak
Açıkçası bu sayfada hiçbir şey denemediniz, bunun büyük çoğunluğu çalışmıyor. Örneğin src = javascript: alert (1) gibi bir şey düzeltildi.
katma yazar rook, kaynak
2006'ya benziyor, ama hala bildiğim en iyisi. Daha kapsamlı bir modern eşdeğerini biliyor musunuz? Cevabımı onunla değiştiririm.
katma yazar thomasrutter, kaynak
Rook'u tanıyorsun, gerçekten iyi bir insana benziyorsun.
katma yazar thomasrutter, kaynak