-2

アラート ボックスが表示されるのはなぜですか

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

4

1 に答える 1

0

オプション テキストに html をエンコードしました。

それは ( を使用してtext()) テキスト表現を取得しているため、問題ではありません。(たとえ HTML 表現を取得していたとしても、ブラウザが DOM 内のテキストを HTML に変換する方法に関する規則によって、いずれにせよ予期しない結果が生じる可能性があります)。

次に、 を使用しますselect.after(that_text);。HTML のように見える文字列 (あなた自身) を渡すとafter、jQuery はそれを HTML として扱います。明示的にテキストとして扱う必要があります。

例えば:

select.after(
    jQuery("<span />").text(that_text)
);
于 2016-03-25T23:01:19.513 に答える