<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="https://blog.kali-team.cn/feed_style.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh">
    <tabi:metadata xmlns:tabi="https://github.com/welpo/tabi">
        <tabi:base_url>https:&#x2F;&#x2F;blog.kali-team.cn</tabi:base_url>
        <tabi:separator>
            •
        </tabi:separator>
        <tabi:about_feeds>这是Web Feed，又称为Atom Feed，把现在的网址复制到新闻阅读器即可订阅本站文章。造访「About Feeds」来了解更多资讯。</tabi:about_feeds>
        <tabi:visit_the_site>造访网站</tabi:visit_the_site>
        <tabi:recent_posts>近期文章</tabi:recent_posts>
        <tabi:last_updated_on>更新于 $DATE</tabi:last_updated_on>
        <tabi:default_theme></tabi:default_theme>
        <tabi:post_listing_date>date</tabi:post_listing_date>
        <tabi:current_section>cve</tabi:current_section>
    </tabi:metadata><link rel="extra-stylesheet" href="https://blog.kali-team.cn/skins/arch.css?h=8b651815fde702215b07" /><title>Kali-Team - cve</title>
        <subtitle>三米前有蕉皮的博客</subtitle>
    <link href="https://blog.kali-team.cn/tags/cve/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://blog.kali-team.cn/tags/cve/" rel="alternate" type="text/html"/>
    <generator uri="https://www.getzola.org/">Zola</generator><updated>2024-02-22T00:00:00+00:00</updated><id>https://blog.kali-team.cn/tags/cve/atom.xml</id><entry xml:lang="zh">
        <title>编写标记网页CVE浏览器插件</title>
        <published>2024-02-22T00:00:00+00:00</published>
        <updated>2024-02-22T00:00:00+00:00</updated>
        <author>
            <name>三米前有蕉皮</name>
        </author>
        <link rel="alternate" href="https://blog.kali-team.cn/blog/编写标记网页CVE浏览器插件/" type="text/html"/>
        <id>https://blog.kali-team.cn/blog/编写标记网页CVE浏览器插件/</id>
        
            <content type="html">&lt;h1 id=&quot;qian-yan&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#qian-yan&quot; aria-label=&quot;Anchor link for: qian-yan&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
前言&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;在查看文章的时候经常会遇到CVE编号，如果想查看详细信息还有手动复制到搜索引擎查询，非常的麻烦，所以打算开发一个浏览器插件，识别页面上的CVE编号，并且在这个CVE编号后面添加一个跳转按钮。&lt;&#x2F;li&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;cn-kali-team&#x2F;mark-cve 全部代码。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h1 id=&quot;shi-xian-luo-ji&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#shi-xian-luo-ji&quot; aria-label=&quot;Anchor link for: shi-xian-luo-ji&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
实现逻辑&lt;&#x2F;h1&gt;
&lt;ol&gt;
&lt;li&gt;要在页面上的可见文本上面找到CVE编号，这里使用正则表达式匹配找到完整的CVE编号，再通过浏览器自带的&lt;code&gt;window.find&lt;&#x2F;code&gt;搜索在页面上找到用户可见的CVE编号。&lt;&#x2F;li&gt;
&lt;li&gt;使用浏览器的设计模式对页面进行修改，window.find会返回一个用户选择的块，就像用户用鼠标划选的那块区域，使用代码可以读取这块的元素，然后在这个元素后面追加跳转按钮。&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;h1 id=&quot;dai-ma-shi-xian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#dai-ma-shi-xian&quot; aria-label=&quot;Anchor link for: dai-ma-shi-xian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
代码实现&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;下面代码为使用正则表达式在&lt;code&gt;innerText&lt;&#x2F;code&gt;匹配CVE编号，再将获取到的完整CVE编号传给window.find在用户可见页面搜索完整的CVE编号获取选块。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;js&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;function FindCVE() {
    GetBaseURL();
    if (DefaultBaseUrl.startsWith(location.hostname)){
        return;
    }
    const regex = new RegExp(&amp;#x27;\\bCVE-\\d{4}-\\d{4,7}\\b&amp;#x27;, &amp;#x27;gmi&amp;#x27;);
    document.designMode = &amp;quot;on&amp;quot;;
    const sel = window.getSelection();
    sel.collapse(document.body, 0);
    let m;
    while (m = regex.exec(document.body.innerText)) {
        while (window.find(m)) {
            Mark();
        }
    }
    document.designMode = &amp;quot;off&amp;quot;;
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;下面为高亮CVE并且在后面添加一个 🐞图标，点击就会跳转到设置好的BaseURL和ID拼接后的链接。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;js&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;function Mark() {
    const userSelection = window.getSelection();
    const id = userSelection.toString();
    let cve = userSelection.getRangeAt(0).startContainer.parentNode;
    if (cve.getElementsByClassName(&amp;quot;Marked&amp;quot;).length &amp;gt; 0) {
        return;
    }
    const spanElement = document.createElement(&amp;quot;span&amp;quot;);
    spanElement.setAttribute(&amp;quot;class&amp;quot;, &amp;quot;Marked&amp;quot;);
    const selectedTextRange = userSelection.getRangeAt(0);
    selectedTextRange.surroundContents(spanElement);
    const icon = document.createElement(&amp;quot;a&amp;quot;);
    icon.href = DefaultBaseUrl + id;
    icon.target = &amp;quot;_blank&amp;quot;;
    const svg = document.createElement(&amp;#x27;img&amp;#x27;);
    svg.setAttribute(&amp;quot;style&amp;quot;, &amp;quot;background-color: rgb(154, 205, 50);&amp;quot;);
    svg.src = &amp;quot;data:image&amp;#x2F;svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb24tdGFibGVyLWJ1ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgOXYtMWEzIDMgMCAwIDEgNiAwdjEiIC8+PHBhdGggZD0iTTggOWg4YTYgNiAwIDAgMSAxIDN2M2E1IDUgMCAwIDEgLTEwIDB2LTNhNiA2IDAgMCAxIDEgLTMiIC8+PHBhdGggZD0iTTMgMTNsNCAwIiAvPjxwYXRoIGQ9Ik0xNyAxM2w0IDAiIC8+PHBhdGggZD0iTTEyIDIwbDAgLTYiIC8+PHBhdGggZD0iTTQgMTlsMy4zNSAtMiIgLz48cGF0aCBkPSJNMjAgMTlsLTMuMzUgLTIiIC8+PHBhdGggZD0iTTQgN2wzLjc1IDIuNCIgLz48cGF0aCBkPSJNMjAgN2wtMy43NSAyLjQiIC8+PC9zdmc+&amp;quot;;
    icon.appendChild(svg);
    spanElement.appendChild(icon);
}
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;di-yi-ge-cha-jian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#di-yi-ge-cha-jian&quot; aria-label=&quot;Anchor link for: di-yi-ge-cha-jian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
第一个插件&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;%E7%BC%96%E5%86%99%E6%A0%87%E8%AE%B0%E7%BD%91%E9%A1%B5CVE%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6&#x2F;Untitled.png&quot; alt=&quot;Untitled&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;我并没有从头开始学习开发完整的浏览器插件，而是在https:&#x2F;&#x2F;github.com&#x2F;mdn&#x2F;webextensions-examples中翻找了几个功能相似的例子，并开始编写javascript代码。&lt;&#x2F;li&gt;
&lt;li&gt;主要是**&lt;code&gt;manifest.json&lt;&#x2F;code&gt;**文件的标注需要一个一个看是实现了什么功能。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;quan-xian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#quan-xian&quot; aria-label=&quot;Anchor link for: quan-xian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
权限&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;下面的权限分别为，&lt;code&gt;activeTab&lt;&#x2F;code&gt;获取当前激活页面的用户交互页面操作，和&lt;code&gt;scripting&lt;&#x2F;code&gt;执行注入用户代码功能，最后的&lt;code&gt;storage&lt;&#x2F;code&gt;的保存BaseURL配置的。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;json&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&amp;quot;permissions&amp;quot;: [
    &amp;quot;activeTab&amp;quot;,
    &amp;quot;scripting&amp;quot;,
    &amp;quot;storage&amp;quot;
  ],
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;yong-hu-dai-ma&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#yong-hu-dai-ma&quot; aria-label=&quot;Anchor link for: yong-hu-dai-ma&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
用户代码&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;在这里的代码会在&lt;code&gt;document_idle&lt;&#x2F;code&gt;页面加载完成后将文件&lt;code&gt;content-script.js&lt;&#x2F;code&gt;注入到页面。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;json&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&amp;quot;content_scripts&amp;quot;: [
    {
      &amp;quot;run_at&amp;quot;: &amp;quot;document_idle&amp;quot;,
      &amp;quot;all_frames&amp;quot;: false,
      &amp;quot;matches&amp;quot;: [
        &amp;quot;*:&amp;#x2F;&amp;#x2F;*&amp;#x2F;*&amp;quot;
      ],
      &amp;quot;js&amp;quot;: [
        &amp;quot;content-script.js&amp;quot;
      ]
    }
  ],
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h2 id=&quot;pei-zhi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#pei-zhi&quot; aria-label=&quot;Anchor link for: pei-zhi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
配置&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;添加配置页面，用于对插件的配置进行设置，这里只添加了一个自定义框，需要上面说到的&lt;code&gt;storage&lt;&#x2F;code&gt;权限。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;json&quot; class=&quot;language-json &quot;&gt;&lt;code class=&quot;language-json&quot; data-lang=&quot;json&quot;&gt;&amp;quot;options_ui&amp;quot;: {
    &amp;quot;page&amp;quot;: &amp;quot;options&amp;#x2F;options.html&amp;quot;
  },
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;ul&gt;
&lt;li&gt;可以使用&lt;code&gt;browser.storage.local&lt;&#x2F;code&gt;，对象进行&lt;code&gt;get&lt;&#x2F;code&gt;和&lt;code&gt;set&lt;&#x2F;code&gt;方法操作。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;js&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;const KeyName = &amp;#x27;base_url&amp;#x27;;
const DefaultBaseUrl = &amp;#x27;https:&amp;#x2F;&amp;#x2F;scap.kali-team.cn&amp;#x2F;cve&amp;#x2F;&amp;#x27;
let Config = {
    base_url: DefaultBaseUrl,
};

async function updateUI() {
    await browser.storage.local.get(KeyName)
        .then((item) =&amp;gt; {
            document.querySelector(&amp;#x27;#base_url&amp;#x27;).value = item.base_url || DefaultBaseUrl;
        })
}

async function updateBaseUrl() {
    Config.base_url = document.querySelector(&amp;#x27;#base_url&amp;#x27;).value;
    await browser.storage.local.set(Config);
    updateUI();
}

async function resetBaseUrl() {
    await browser.storage.local.set(Config);
    updateUI();
}

document.addEventListener(&amp;#x27;DOMContentLoaded&amp;#x27;, updateUI);

&amp;#x2F;**
 * Handle update and reset button clicks
 *&amp;#x2F;
document.querySelector(&amp;#x27;#update&amp;#x27;).addEventListener(&amp;#x27;click&amp;#x27;, updateBaseUrl)
document.querySelector(&amp;#x27;#reset&amp;#x27;).addEventListener(&amp;#x27;click&amp;#x27;, resetBaseUrl)
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;%E7%BC%96%E5%86%99%E6%A0%87%E8%AE%B0%E7%BD%91%E9%A1%B5CVE%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6&#x2F;option.png&quot; alt=&quot;option.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;diao-shi&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#diao-shi&quot; aria-label=&quot;Anchor link for: diao-shi&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
调试&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;https:&#x2F;&#x2F;github.com&#x2F;mozilla&#x2F;web-ext安装好，直接在项目文件夹run，然后去浏览器的插件的管理页面点击调试插件，就可以在新建窗口看到调试控制台信息了。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;%E7%BC%96%E5%86%99%E6%A0%87%E8%AE%B0%E7%BD%91%E9%A1%B5CVE%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6&#x2F;Untitled%201.png&quot; alt=&quot;Untitled&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;shu-qian-cha-jian&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#shu-qian-cha-jian&quot; aria-label=&quot;Anchor link for: shu-qian-cha-jian&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
书签插件&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;Firefox浏览器插件还没审核通过，现在推荐使用书签插件执行javascript，创建一个书签将URL这框以javascript:开头，然后将**&lt;code&gt;content-script.js&lt;&#x2F;code&gt;&lt;strong&gt;文件里面的javascript代码复制进去就可以了，注意不要复制前面的&lt;&#x2F;strong&gt;Tampermonkey**注释。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;%E7%BC%96%E5%86%99%E6%A0%87%E8%AE%B0%E7%BD%91%E9%A1%B5CVE%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6&#x2F;Untitled%202.png&quot; alt=&quot;Untitled&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;tampermonkey&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#tampermonkey&quot; aria-label=&quot;Anchor link for: tampermonkey&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
&lt;strong&gt;TamperMonkey&lt;&#x2F;strong&gt;&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;在原来的代码基础上加上Tampermonkey的配置注释描述，下面的代码不变。&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;pre data-lang=&quot;js&quot; class=&quot;language-js &quot;&gt;&lt;code class=&quot;language-js&quot; data-lang=&quot;js&quot;&gt;&amp;#x2F;&amp;#x2F; ==UserScript==
&amp;#x2F;&amp;#x2F; @name         Mark CVE
&amp;#x2F;&amp;#x2F; @namespace    http:&amp;#x2F;&amp;#x2F;tampermonkey.net&amp;#x2F;
&amp;#x2F;&amp;#x2F; @version      0.1.2
&amp;#x2F;&amp;#x2F; @description  Mark the current page CVE
&amp;#x2F;&amp;#x2F; @author       Kali-Team
&amp;#x2F;&amp;#x2F; @match        *:&amp;#x2F;&amp;#x2F;*&amp;#x2F;*
&amp;#x2F;&amp;#x2F; @exclude      https:&amp;#x2F;&amp;#x2F;scap.kali-team.cn&amp;#x2F;*
&amp;#x2F;&amp;#x2F; @icon         https:&amp;#x2F;&amp;#x2F;avatars.githubusercontent.com&amp;#x2F;u&amp;#x2F;99640169?s=200&amp;amp;v=4
&amp;#x2F;&amp;#x2F; @grant        none
&amp;#x2F;&amp;#x2F; @run-at       document-idle
&amp;#x2F;&amp;#x2F; @homepage     https:&amp;#x2F;&amp;#x2F;github.com&amp;#x2F;cn-kali-team&amp;#x2F;mark-cve
&amp;#x2F;&amp;#x2F; @license      GPL-3.0-only
&amp;#x2F;&amp;#x2F; ==&amp;#x2F;UserScript==
&lt;&#x2F;code&gt;&lt;&#x2F;pre&gt;
&lt;h1 id=&quot;xiao-guo&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#xiao-guo&quot; aria-label=&quot;Anchor link for: xiao-guo&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
效果&lt;&#x2F;h1&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;%E7%BC%96%E5%86%99%E6%A0%87%E8%AE%B0%E7%BD%91%E9%A1%B5CVE%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6&#x2F;Untitled%203.png&quot; alt=&quot;Untitled&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;blog.kali-team.cn&#x2F;blog&#x2F;%E7%BC%96%E5%86%99%E6%A0%87%E8%AE%B0%E7%BD%91%E9%A1%B5CVE%E6%B5%8F%E8%A7%88%E5%99%A8%E6%8F%92%E4%BB%B6&#x2F;AttackerKB.png&quot; alt=&quot;AttackerKB.png&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h1 id=&quot;can-kao&quot;&gt;&lt;a class=&quot;header-anchor no-hover-padding&quot; href=&quot;#can-kao&quot; aria-label=&quot;Anchor link for: can-kao&quot;&gt;&lt;span class=&quot;link-icon&quot; aria-hidden=&quot;true&quot;&gt;&lt;&#x2F;span&gt;&lt;&#x2F;a&gt;
参考&lt;&#x2F;h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;extensionworkshop.com&#x2F;documentation&#x2F;develop&#x2F;debugging&#x2F;&quot;&gt;https:&#x2F;&#x2F;extensionworkshop.com&#x2F;documentation&#x2F;develop&#x2F;debugging&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Mozilla&#x2F;Add-ons&#x2F;WebExtensions&#x2F;API&#x2F;scripting&#x2F;executeScript&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Mozilla&#x2F;Add-ons&#x2F;WebExtensions&#x2F;API&#x2F;scripting&#x2F;executeScript&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Mozilla&#x2F;Add-ons&#x2F;WebExtensions&#x2F;manifest.json&#x2F;permissions&quot;&gt;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;Mozilla&#x2F;Add-ons&#x2F;WebExtensions&#x2F;manifest.json&#x2F;permissions&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;5887719&quot;&gt;https:&#x2F;&#x2F;stackoverflow.com&#x2F;a&#x2F;5887719&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;developer.chrome.com&#x2F;docs&#x2F;extensions&#x2F;reference&#x2F;api&#x2F;storage?hl=zh-cn&quot;&gt;https:&#x2F;&#x2F;developer.chrome.com&#x2F;docs&#x2F;extensions&#x2F;reference&#x2F;api&#x2F;storage?hl=zh-cn&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a rel=&quot;noopener nofollow noreferrer&quot; target=&quot;_blank&quot; href=&quot;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;zh-CN&#x2F;firefox&#x2F;addon&#x2F;mark-cve&#x2F;&quot;&gt;https:&#x2F;&#x2F;addons.mozilla.org&#x2F;zh-CN&#x2F;firefox&#x2F;addon&#x2F;mark-cve&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
        <summary type="html">一个标注当前页面CVE编号的浏览器插件</summary>
        </entry>
</feed>
