【发布时间】:2014-10-23 06:15:34
【问题描述】:
我正在我正在开发的网站上进行一些安全测试,但我遇到了一些我似乎无法解释的行为。在这个jsFiddle 中可以看到一个简化的示例,其中包含 HTML:
<div id="test">This is a test!</div>
和javascript:
$(function(){
$('#test').mouseover(function(){
$(this).innerHtml = "test*<script>alert('mouse over fired!');</script>*test";
});
});
令我惊讶的是,这个渲染(没有鼠标悬停...):
*test"; }); }); });//]]>
This is a test!
我觉得这很奇怪,所以我添加了一个警报like so:
$(function(){
$('#test').mouseover(function(){
alert("</script>");
$(this).innerHtml = "test*<script>alert('mouse over fired!');</script>*test";
});
});
我再次感到惊讶,因为这一次我的鼠标悬停事件在页面加载后立即触发。我认为这可能是一个 jsFiddle 错误,所以我创建了一个 simple HTML document,但它具有相同的行为。我能够在 Chrome、Safari 和 Firefox 中重现。
谁能解释为什么会这样?
【问题讨论】:
-
alert('mouse over fired!')被执行是因为.innerHTML解析(或者“评估”将是更合适的词)提供的字符串。*test"; }); }); });//]]>在页面中,因为</script>被解释为脚本的结尾。我可以建议的是去掉代码中的 HTML 标签:fiddle
标签: javascript jquery