如何将“Referer”标头添加到使用清单 V3 进行的扩展中进行的网络调用?

How to add `Referer` header to network calls being made in extensions made using manifest V3?

提问人:Sam 提问时间:5/27/2023 更新时间:5/27/2023 访问量:130

问:

我使用 manifest v3 开发了一个 chrome 扩展程序。我正在内容脚本中打开一个 iframe,并且从 iframe 中进行了很少的网络调用。我看到这些调用没有标头。为了解决这个问题,我使用了.RefererdeclarativeNetRequest

我有这个在我的manifest.json

 "permissions": ["scripting", "activeTab", "contextMenus", "storage", "tabs", "declarativeNetRequestWithHostAccess",
  "declarativeNetRequestFeedback"]

在我的 中使用这段代码添加标头service workerReferer

async function addRefererToRequestHeader() {
  const ruleId = Math.floor(Math.random() * 1000000); // Generate a random number as the rule ID

  const rules = [{
    id: ruleId,
    action: {
      type: 'modifyHeaders',
      requestHeaders: [
        {
          header: 'New-Referer',
          operation: 'set',
          value: 'https://example.com/*',
        },
      ],
    },
    condition: {
      resourceTypes: ['sub_frame'],
      urlFilter: 'https://example.com/*',
    },
  }];

  try {
    await browser.declarativeNetRequest.updateDynamicRules({
      removeRuleIds: [],
      addRules: rules,
    });

    console.log('Rules added successfully.');
  } catch (error) {
    console.error('Error adding rules:', error);
  }
}

但显然,调用不包含任何标头。 甚至可以添加标题吗?如果是这样,如何?这样做会带来哪些安全隐患?https://example.com/*RefererReferer

PS:我正在使用webextension polyyfills浏览器

浏览器 谷歌 浏览器扩展 chromium mozilla webextension-polyfill

评论

0赞 wOxxOm 5/27/2023
1) 将网站或添加到 .2) 应该是 3) 对规则使用稳定的相同 id,例如 并在 removeRuleIds 中指定它。此外,请先卸载扩展程序,以清除旧规则。4) Devtools 在某些情况下不显示添加的标头,这是一个错误,因此请使用 Fiddler/Charles/WireShark 或检查真正的标头。<all_urls>host_permissionsNew-RefererReferer1chrome://net-export
0赞 Sam 5/30/2023
@wOxxOm 清单中我需要哪些权限?这两个“declarativeNetRequestWithHostAccess”和“declarativeNetRequestFeedback”都是必需的吗?
0赞 Sam 6/5/2023
@wOxxOm 我已经完成了上述更改,并将 Referer 值设置为 .当我尝试在生成的文件中找到此值时,我找不到它?我错过了什么吗?this-is-a-referer-headerchrome://net-export

答: 暂无答案