2011-05-07 9 views
6

Benim javascript bir sorgu dizesinden veri okur ve bu verileri jQuery.val() kullanarak bir metin kutusuna koyar.Javascript/jQuery Sorgu dizgileri üzerinden okuma XSS potansiyeli

Bu iyi çalışıyor ancak XSS saldırılarına karşı güvenli olduğunu mu merak ediyorum?

ben IE8/firefox test kadarıyla jQuery.val('"javascript:alert(document.cookie)')

Bu giriş değerini ayarlar:

etkili bir yapacağını

site.com?q="javascript:alert(document.cookie)

... sorgu dizesi benziyordu Say Görüldüğü gibi gerçek enjeksiyon yapmaz.

Ben ilk dize üzerinde bu işlevi çalıştırırsanız:

function htmlEncode(str) { 
    return str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;'); 
} 

Sonra anlamıyla ne istiyorum değil, giriş değeri &quot;javascript:alert(document.cookie) bakın.

jQuery'yi kullanma 1.5.2 Sanırım sorum, sizin için jQuery.val() HTML varlıklarını ele alıyor ve bu nedenle güvenli kabul ediliyor mu?

cevap

8

Verilen aşağıdaki gibidir:

val fonksiyonu için JQuery kodu sadece yapar
jQuery("#SomeTextbox").val("new value for SomeTextbox") 

bu:

this ile metin kutusu temsil DOM Text nesneye bir referanstır
this.value = "new value for SomeTextbox"; 

id "SomeTextbox". "new value for SomeTextbox" dizesi, bu DOM nesnesinin value özelliği olarak saklanır. Hiçbir şekilde dönüştürülmez veya dezenfekte edilmez. Ancak JavaScript motoru tarafından ayrıştırılamaz/yorumlanamaz (ör. InnerHTML ile olduğu gibi). Dolayısıyla, val numaralı argümanınız ne olursa olsun, hiçbir şey yapmaz. Sadece DOM'daki bir nesnenin string özelliğinin değerini değiştirir. Yani, evet, güvenli olurdu.

DÜZENLEME: İşte

yardımcı olabilecek bazı ek bilgiler.

Genel olarak, bir metin kutusuna bir şey koymak, ne kadar zararlı görünebilir olursa olsun, ve oraya nasıl ulaştığından bağımsız olarak, metin kutusunda kaldığı sürece "güvenli" olur. Ama oradan nereye gittiği çok önemli.

Metin kutusunun içeriği daha sonra ayrıştırılmış HTML akışında oluşturuluyorsa, artık güvenli değildir. Yaygın bir senaryo, bir metin kutusunun içeriğini bir veritabanında depolamak, daha sonra yeniden almak ve tarayıcının HTML olarak ayrıştırıldığı bir bağlamda oluşturmaktır. Yeniden görüntüleme farklı bir kullanıcı bağlamında gerçekleşirse, kötü niyetli bir kullanıcının, başka bir kullanıcı özel bilgisine ileriki zamanda erişebilmesi için metin kutusuna veri girmesi için bir fırsat yaratır.

+0

@fire - Yukarıdaki cevabı yazdıktan sonra, yardımcı olabileceğiniz başka bir şey düşündüm.Asıl cevabımı zaten kabul etmiş olmanıza rağmen, ek materyali yine de yayınlamaya karar verdim çünkü bence sorduğunuz şeyin altında yatan daha derin bir soruyu yanıtlayabilir. Hackerların körfezde kalması için iyi şanslar! –

İlgili konular