Content Security Policy (CSP)
为缓解潜在的大规模的跨站点脚本攻击问题,Chrome扩展系统已遵循Content Security Policy (CSP)的理念,引入了严格的策略使扩展更安全,同时提供创建和实施策略规则的能力,这些规则用以控制扩展(或应用)能够加载的资源和执行的脚本。
通常情况下,CSP通过黑白名单的机制控制资源加载(或执行脚本)。为您的扩展制定一个合理的策略以使您认真地考虑哪些资源是扩展需要的,并让浏览器确保仅仅这些资源是您的扩展需要访问的。
这些策略为您的扩展提供host permissions之外的额外安全保障;这是一个额外的一层保护,而不是一种取代。
在Web上,此策略是通过HTTP头或meta元素定义的。在Chrome扩展系统中,不存在这两种方式。扩展是通过manifest.json文件定义的:
{
...,
"content_security_policy": "[POLICY STRING GOES HERE]"
...
}
默认策略限制
没有定义manifest_version的扩展安装包默认是没有内容安全策略的。定义manifest_version为2的扩展才会默认开启内容安全策略。
script-src 'self'; object-src 'self'
此策略包含两条规则。这些规则都限制了扩展(或应用)的权限以增强安全:
不执行Inline JavaScript
Inline JavaScript和eval一样危险,将不会被执行。这条规则将同时禁止内嵌
)。
这条规则通过禁止第三方脚本避免大量的跨脚本攻击。同时它还强制您编写内容与表现分离的代码(这本就是您该做的,对吧?)。用个例子说明这一点:
假设您在一个单独的popup.html文件中实现如下Browser Action弹出页:
My Awesome Popup!function awesome() {
// do something awesome!
}
function totallyAwesome() {
// do something TOTALLY awesome!
}
function clickHandler(element) {
setTimeout("awesome(); totallyAwesome()", 1000);
}
Click for awesomeness!