Chrome扩展程序:如何使用declarativeNetRequest绕过内容安全策略

8
我正在制作一个扩展程序,将用户提供的脚本注入到当前网站中。我已经完成了这部分工作(在 wOxxOm 的帮助下)。唯一的问题是,在某些网站上它无法工作。控制台会抛出以下错误:Refused to execute inline script because it violates the following Content Security Policy directive: "script-src 'self'。我一直在尝试使用 declarativeNetRequest 来修复这个问题,但它没有起作用。
rule1.json
[
    {
        "id": 1,
        "priority": 1,
        "action": {
            "type": "modifyHeaders",
            "responseHeaders": [
                {
                    "header": "content-security-policy",
                    "operation": "remove"
                }
            ]
        },
        "condition": {
            "urlFilter": "*://*/*",
            "resourceTypes": ["main_frame"]
        }
    }
]

manifest.json

{
    ...
    "permissions": ["scripting", "activeTab", "declarativeNetRequest"],
    ...
    "declarative_net_request": {
        "rule_resources": [
            {
                "id": "ruleset_1",
                "enabled": true,
                "path": "/rules/rule1.json"
            }
        ]
    }
}

Javascript

let button = document.getElementById("run");
button.addEventListener("click", async () => {
    let input = document.getElementById("script");
    let script = input.value;
    await execInPage(script);
});
async function execInPage(code) {
    const [tab] = await chrome.tabs.query({ currentWindow: true, active: true });
    chrome.scripting.executeScript({
        target: { tabId: tab.id },
        func: (code) => {
            const el = document.createElement("script");
            el.textContent = code;
            document.head.appendChild(el);
        },
        args: [code],
        world: "MAIN",
    });
}

我正在使用Manifest V3版本。 该扩展还没有发布,目前正在使用开发者模式。


4
你的代码在我的Github上运行良好,所以要么你的“host_permissions”中没有"<all_urls>",要么是其他扩展程序干扰了它,或者这是Chrome的一个bug。 - wOxxOm
3个回答

0

rule_remove_csp.json

[
  {
    "id": 11,
    "priority": 1,
    "action": {
      "type": "modifyHeaders",
      "responseHeaders": [
        {
          "header": "X-Frame-Options",
          "operation": "remove"
        },
        {
          "header": "Content-Security-Policy",
          "operation": "remove"
        }
      ]
    },
    "condition": {
      "resourceTypes": [
        "main_frame"
      ]
    }
  }
]

-1

它似乎无法在使用 <meta> 元素设置CSP的网站上工作。 有其他解决方案吗?


目前你的回答不够清晰,请编辑并添加更多细节,以帮助其他人理解它如何回答问题。你可以在帮助中心找到有关如何编写好答案的更多信息。 - Community

-1
你在 Chrome Web Store 上发布了吗?我想知道 Google 是否接受这段代码,因为 MV3 不允许使用任何远程托管的代码。 远程托管代码限制

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Vojin Purić

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接