我有一个Chrome扩展程序,该扩展程序从该扩展程序的后台脚本向我的网站发出POST请求。我收到以下错误(显示在Chrome的扩展程序管理器中):
拒绝连接到“ my blog”,因为它违反了以下内容安全策略指令:“ default-src'none'”。请注意,未明确设置“ connect-src”,因此将“ default-src”用作备用。
老实说,我是否需要更改js代码或服务器端的内容,我还是不清楚。
background.js:
var xmlHttp;
function makerequest(){
xmlHttp=new XMLHttpRequest();
xmlHttp.open("POST", "https://my.website.com/path/",true);
xmlHttp.onreadystatechange = got_response;
var formData = new FormData();
xmlHttp.send(formData);
}
function got_response(){
if (xmlHttp.readyState == 4){
alert(xmlHttp.responseText);
}
}
清单包括:
"permissions": ["activeTab", "*://my.website.com/*","contextMenus"],
"background": {
"scripts": ["background.js"],
"persistent": false
},
"content_security_policy":"connect-src 'self' https://my.website.com/*",
我看到还有其他相关的问题/答案。但是,他们要么尝试访问其他人的网站(不是我控制的网站),要么使用内联代码存在问题,因为代码位于background.js中(或者如果是, 请解释!)。如果您建议其他答案或投票赞成关闭,请实际检查其他答案是否已回答此问题。
答案 0 :(得分:0)
您需要从CSP字符串中删除结尾的星号。在CSP字符串的源标识符的路径部分中,星号不解释为通配符。您当前的CSP字符串仅允许连接到文字URL https://my.website.com/*
。
Content Security Policy Level 2 specification明确表示:
匹配包含路径的源表达式的规则是 比看起来简单:以'/'字符结尾的路径 目录及其子目录中的所有文件。 路径不结束 带有'/'字符的字符仅与一个特定文件匹配。
除此之外,清单中的CSP字符串应限制script-src
和object-src
(显式或使用default-src
)。如果不这样做,Chrome会在扩展程序详细信息页面上显示警告。
清单中的CSP行因此应如下所示:
"content_security_policy":"default-src 'self'; connect-src 'self' https://my.website.com/",