为什么内联JS块不安全?

时间:2012-08-11 16:02:06

标签: javascript security inline-scripting

我正在阅读Chrome扩展程序文档“Content Security Policy (CSP)”。它说:

  

内联JavaScript,以及危险的字符串到JavaScript方法   像eval一样,不会被执行。这种限制禁止内联    块和内联事件处理程序(例如<button onclick="...">)。

     

...

     

没有放松执行限制的机制   内联JavaScript。特别是,设置一个脚本策略   包括unsafe-inline将无效。这是故意的。

为什么内联<script>阻止不安全?有人能解释一下吗?如果你能举出例子会更好。

谢谢。

1 个答案:

答案 0 :(得分:5)

如页面所示:

  

第一个限制消除了一大类跨站点脚本   使你无法意外执行脚本的攻击   由恶意的第三方提供。

基本上,您加载的任何脚本都必须位于扩展程序本地可访问的单独文件中。这可以防止您加载注入页面的第三方脚本或包含它们的第三方脚本:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>

这方面的一个例子是,如果您有一个用户可以填写的表单。用户可以在其中输入带有一些JS的脚本标记。让我们说它就像一个讨论论坛。我进去做一个主题,但它有一些隐藏的JS。我们还假设您在发布之前不要清除它。现在我的帖子有JS,每当有人看到它时都会执行。这可以防止该脚本被执行。