1

当我发现这个奇怪的问题时,我正在清除我的网站的一些问题。

<img src=".." width="1200" height="1200" alt="&lt;script&gt;alert(&quot;foo&quot;);&lt;/script&gt;" />

CMS 似乎已经完成了它的工作并转换<script>alert('foo')</script>为您在上面看到的内容。我使用以下代码显示标题。

site.caption = {

    container : $('#caption'),

    set : function(str) {

        if (str && str.length) {
            this.container.html('<span>'+str+'</span>').show(); console.log(str);
        } else {
            this.container.hide();
        }

    }

};

函数是这样调用的。

site.caption.set($(nextSlideElement).find('img').attr('alt'));

当此行运行时,会弹出一个带有文本“foo”的警告框。当我在site.caption.set函数中执行以下操作时,它会显示有效的 html。

console.log(str);

我正在使用 jQuery 1.8.3。有谁知道为什么会这样?如何在<script>alert('foo')</script>不运行的情况下显示文本?

4

2 回答 2

3

jQuery 不会转换它,浏览器会在它解析 HTML 时进行转换。

如果要将字符串视为文本而不是 HTML,请使用jQuery('foo').text(value)而不是jQuery('foo').html(value).

于 2013-06-06T14:03:26.070 回答
1
this.container.html('<span>'+str+'</span>')

永远不要连接 HTML 字符串。让 jQuery 为您做这件事。养成这个习惯,你就不会遇到这个问题。

this.container.empty().append($('<span/>').text(str));
于 2013-06-06T14:07:38.223 回答