托管我们网站的公司会在部署之前检查我们的代码-他们最近告诉我们:
例如,代替
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/