2016-03-25 32 views
-2

爲什麼會收到警告框在option.text()很容易受到XSS在我的例子小提琴

$(function() { 
 
     $('#users').each(function() { 
 
     var select = $(this); 
 
     var option = select.children('option').first(); 
 
     select.after(option.text()); 
 
     select.hide(); 
 
     }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<select id="users" name="users"> 
 
    <option value="bad">&lt;script&gt;alert(&#x27;xss&#x27;);&lt;/script&gt;</option> 
 
</select>

雖然我已經中選擇文本編碼版本(&lt;script&gt;alert(&#x27;xss&#x27;);&lt;/script&gt;)

我想阻止顯示警報,因爲我在選項文本中編碼了html。可以有人告訴我我錯過了什麼?

https://jsfiddle.net/hf1fbhmg/

+2

問題尋求幫助調試(「?爲什麼不是這個代碼工作」)必須包括所期望的行爲,一個特定的問題或錯誤,並在最短的代碼要重現**在這個問題本身** – Quentin

+0

通過隱藏(不存在)代碼塊內的鏈接來避開jsfiddle限制是一個不可以的 –

+0

我不知道如何插入鏈接。道歉。 – user3501278

回答

0

我已編碼的選項文本HTML。

這並不重要,因爲你得到它的文本表示(與text())。 (即使您獲得了HTML表示,但瀏覽器將DOM中的文本轉換回HTML的規則可能會給您帶來意想不到的結果)。您可以使用select.after(that_text);。如果你將一個看起來像HTML(你是)的字符串傳遞給after,那麼jQuery會將它視爲HTML。你需要明確地把它當作文本。

例如:

select.after(
    jQuery("<span />").text(that_text) 
); 
+0

@JeremyBanks - 它有一堆內容,我覺得令人驚訝和/或嚴重記錄...這不是其中之一。 – Quentin

+0

「即使您獲得了HTML表示,瀏覽器如何將DOM中的文本轉換回HTML的規則可能會給您帶來意想不到的結果」 - >我該如何防止這種情況發生?這是我無法弄清楚的。 – user3501278

+0

@ user3501278 - 正如我所說,這是加載了陷阱的東西,所以不要嘗試。做我推薦的。 – Quentin