2012-07-14 20 views
5

belirli bir sayfası için Javascript devre dışı bırakmak için herhangi bir HTTP-başlığı var mı? Web sitem, kullanıcı tarafından oluşturulan HTML içeriğini sunuyor (bu yüzden sadece htmlenitities kullanamıyorum) ve komut dosyası oluşturmayı (JavaScript enjeksiyonları) önlemek istiyorum. kullanıcı içeriği yalnızca çerez okunamaz alt alanlara görüntülenirkendevre dışı bırakın JavaScript yürütme

Zaten, sadece ana etki alanında HttpOnly-cookies kimlik doğrulaması için ayarlanan kullanın. sorun JavaScript çalıştırmak çok fazla olasılık hala var olmasıdır - örneğin olayı onclick gibi özellikleri kullanılarak ve Internet Explorer JavaScript infaz Daha önce hiç duymamış (expression) izin vermek CSS bile bir özelliği vardır. Okuduğum bir başka ilginç fikir, aşağıdaki kodu engellemek için bir istisna atmaktı. İzin verilen tüm etiketleri içeren bir listeyi ve ek olarak her izin verilen öznitelik adına sahip bir dizi tanımlamak bir fikir olabilir, ancak bu çok zor bir iştir ve sanırım bu tüm olası enjeksiyonları kapsamaz.

Bu problemi yaşayan tek kişi ben değilim, bu yüzden en azından modern tarayıcılarda tüm olası zararlı kodu kapsayan bir olasılık biliyor musunuz? hayat çok daha kolay yapar X-Scripting: disabled benzer

Basit hayali başlık!

+0

Hiç "script" etiketlerini ve kullanıcı girdisindeki belirli öznitelikleri engellemeyi düşündünüz mü? –

+0

Ben kastettiğim şey buydu: "İzin verilen tüm etiketler ve ek olarak her izin verilen özellik adında bir dizi içeren bir listeyi tanımlamak bir fikir olabilir ama bu çok zor bir çalışmadır ve sanırım bu tüm olası enjeksiyonları kapsamaz." (Yani örneğin "div" veya "yayılma" gibi zararsız etiketlerine izin ve "onclick", "onmouseover", ancak bu tüm enjeksiyonları kapak olmaz gibi özelliklerini devre dışı olur tarayıcılar farklı, tarayıcıya özel nitelik ve özelliklerini beri) –

cevap

2

Evet, JavaScript XSS imkansız yapabilirsiniz, nereden geldiğini kontrol etmenizi sağlar Content Security Policy denilen deneysel HTTP başlığı vardır. Ancak şu anda yalnızca Chrome ve Firefox tarafından desteklenmektedir.

HttpOnly çerezlerini etkinleştirmek iyi bir fikirdir, ancak bu tam olarak ZERO saldırılarını engeller. XSS'den hala reading CSRF tokens, and carrying out requests with an XHR'dan yararlanabilirsiniz.

XSS'yi elde etmenin birçok yolu vardır ve ShieldSeal gibi bir Güvenlik Açığı Tarayıcısı bunların tümünü (neredeyse) bulacaktır. Skipfish, çok ilkel olan, ancak ücretsiz olan açık kaynaklı bir güvenlik açığı tarayıcıdır. Çoğu web uygulamasının geniş yayılmış güvenlik açıkları ile bu şekilde ilgileniyor. (SheildSeal için çalışıyorum ve onların güvenlik açığı tarayıcısını geliştirmeye yardımcı oluyorum ve işimi seviyorum.)

Bir sorun bulunduğunda, girişi sıfırlamak için htmlspecialchars($var) veya htmlspecialchars($var,ENT_QUOTES) kullanmalısınız. ENT_QUOTES, bir saldırganın bir onclick veya başka bir JavaScript olayı sunmasını engelleyebilir.

+0

Tek sorun, kullanıcıların HTML içeriğini oluştururken olabildiğince özgür olmaları, ancak dinamik istemci tarafı kodunu çalıştırmadan mümkün olmalarıdır. SQL-enjeksiyonları veya PHP-enjeksiyonları bir sorun değildir, çünkü kod bir veritabanında saklanır, .php dosyalarında saklanmaz ve tüm parametreler SQL ifadelerinde kullanılmadan önce temizlenir. Örneğin, 'img' etiketleri için 'src' gibi gerekli öznitelikleri vardır, 'ENT_QUOTES' basitçe kullanamıyorum ve tüm girdileri dezenfekte edemiyorum. Ancak, sitemi en azından Firefox/Chrome Kullanıcıları için güvenli hale getirmek için İçerik Güvenliği Politikası hakkında daha fazla bilgi edeceğim. –

+0

@Birk oah Yanlış okumuş, sonra HTMLPurifier'ı kullanmak istersiniz. Ayrıca, kullanım sırasında genellikle sterilize etmelisiniz, bu yüzden xss için çıktı üzerinde dezenfekte edin.Ancak, HTMLPurifier çok fazla kaynak kullanır, bu yüzden veritabanına eklemeden önce bunu kullanmalısınız. – Mikey

+0

@Birk, ayrıca HTML/CSS’yi güvenli bir şekilde gömmek için Google Caja projesine göz atmak isteyebilirsiniz. https://developers.google.com/caja/ – JackWink

İlgili konular