Chrome расширение, ошибка политики безопасности содержимого XMLHttpRequest - PullRequest
0 голосов
/ 24 февраля 2020

У меня есть расширение Chrome, которое отправляет запрос POST на мой веб-сайт из фонового скрипта расширения. Я получаю следующую ошибку (отображается в диспетчере расширений Chrome):

Отказался подключиться к 'https://my.website.com/path/', поскольку он нарушает следующую директиву политики безопасности содержимого : "default-sr c 'none'". Обратите внимание, что 'connect-sr c' не был задан явно, поэтому в качестве запасного варианта используется 'default-sr c'.

Честно говоря, мне даже не ясно, нужно ли мне изменить что-либо в 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/*",

Я видел что есть другие связанные вопросы / ответы. Тем не менее, они либо пытаются получить доступ к чужому веб-сайту (не тот, который я контролирую), либо есть проблема с использованием встроенного кода, который, похоже, не является проблемой здесь, поскольку код находится в фоновом режиме. js (или если это, пожалуйста, объясните!). Если вы предлагаете другой ответ или проголосуете за закрытие, пожалуйста, проверьте, действительно ли другой ответ отвечает на ЭТОТ вопрос.

1 Ответ

0 голосов
/ 25 февраля 2020

Вам необходимо удалить конечную звездочку из строки CSP. Звездочки не интерпретируются как символы подстановки в части пути идентификатора источника в строках CSP. Ваша текущая строка CSP разрешает соединения только с литеральным URL https://my.website.com/*.

Спецификация уровня безопасности политики уровня 2 прямо говорит:

Правила для сопоставления источника выражения, содержащие пути, проще, чем выглядят: пути, заканчивающиеся символом '/', соответствуют всем файлам в каталоге и его подкаталогах. Пути, которые не заканчиваются символом '/', соответствуют только одному указанному c файлу.

Кроме того, строка CSP в манифесте должна ограничивать script-src и object-src (либо явно, либо с использованием default-src). Если этого не происходит, Chrome отображает предупреждения на странице сведений о расширении.

Поэтому строка CSP в вашем манифесте должна выглядеть следующим образом:

"content_security_policy":"default-src 'self'; connect-src 'self' https://my.website.com/",
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...