Chrome扩展程序,XMLHttpRequest内容安全策略错误

时间:2020-02-24 20:55:38

标签: google-chrome-extension

我有一个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中(或者如果是, 请解释!)。如果您建议其他答案或投票赞成关闭,请实际检查其他答案是否已回答此问题。

1 个答案:

答案 0 :(得分:0)

您需要从CSP字符串中删除结尾的星号。在CSP字符串的源标识符的路径部分中,星号不解释为通配符。您当前的CSP字符串仅允许连接到文字URL https://my.website.com/*

Content Security Policy Level 2 specification明确表示:

匹配包含路径的源表达式的规则是 比看起来简单:以'/'字符结尾的路径 目录及其子目录中的所有文件。 路径不结束 带有'/'字符的字符仅与一个特定文件匹配。

除此之外,清单中的CSP字符串应限制script-srcobject-src(显式或使用default-src)。如果不这样做,Chrome会在扩展程序详细信息页面上显示警告。

清单中的CSP行因此应如下所示:

"content_security_policy":"default-src 'self'; connect-src 'self' https://my.website.com/",