如何限制SecurityInfo。每个根域每个URL命中仅出现一次

时间:2019-02-14 16:47:30

标签: firefox firefox-addon firefox-webextensions

我正在使用webExtension SecurityInfo API。例如,我想查看是否启用了HSTS。我只想知道此信息。每个标签一次。例如,在此代码中,我要检查是否启用了HSTS。

background.js

sync function logger(details) {
  try {
    let securityInfo = await browser.webRequest.getSecurityInfo(
      details.requestId, {}
    );
    console.log("URL",details.url)

    if ((securityInfo.state == "secure" || securityInfo.state == "weak") &&
        !securityInfo.isUntrusted) {
        console.log("HSTS:",securityInfo.hsts)
    }
  }
  catch(error) {
    console.error(error);
  }
}

browser.webRequest.onHeadersReceived.addListener(logger,
  {urls: ["<all_urls>"]},
  ["blocking"]
);

当我打开google.com时,在browser console中收到许多针对google.com的链接或同一页面中嵌入链接的许多响应。

我只想知道SecurityInfo。对于URL的根域,我点击了URL栏。没有其他的。例如,如果我打mail.google.com,我想知道google.com的HSTS状态。如果我再次在同一个标​​签中输入新地址,例如yahoo.com,则有兴趣了解yahoo.com的SecurityInfo。

如果我为google.com打开一个新标签,尽管我在上一个标签中看到了该信息,但我还是希望该信息再次出现,因为它是一个新标签。

即我只想知道每个URL命中一次根域(而不是子域)的SecurityInfo。

然后,manifest.json

{
  "manifest_version": 2,
  "name": "Example",
  "description": "Example.",
  "version": "0.1.0",
  "browser_action": {
    "default_icon": {
      "32": "icons/icon-32.png"
    },
    "default_title": "Example",
    "default_popup": "popup.html"
  },
  "permissions": ["webRequest", "webRequestBlocking", "<all_urls>"],
  "background": {
    "scripts": [ "background.js" ]
  },
  "icons": {
    "32": "icons/icon-32.png"
  },
  "applications": {
    "gecko": {
      "strict_min_version": "62.0b5"
    }
  }
}

1 个答案:

答案 0 :(得分:0)

您可以将browser.webRequest.onHeadersReceived.addListener的第二个参数从{urls: ["<all_urls>"]}更改为{url: ["<all_urls>"], types: ["main_frame"]}。 这意味着您只会在没有页面上所有资源的情况下获得顶级“框架”加载的事件。

  

加载到标签中的顶级文档。

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/ResourceType