在我的示例fiddle中,option.text()易受xs攻击

option.text() is vulnerable to xss in my example fiddle

本文关键字:text 易受 攻击 xs option 我的 fiddle      更新时间:2023-09-26

为什么我在中收到警报框

    $(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/

我已经在选项文本中编码了html。

这并不重要,因为您正在获得它的文本表示(使用text())。(即使您得到的是HTML表示,浏览器如何将DOM中的文本转换回HTML的规则也可能会给您带来意想不到的结果)。

然后使用select.after(that_text);。如果您将一个看起来像HTML的字符串(您就是)传递给after,那么jQuery将把它视为HTML。您需要明确地将其视为文本。

例如:

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