Mark CVE

Mark the current page CVE

当前为 2024-02-26 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Mark CVE
  3. // @namespace http://tampermonkey.net/
  4. // @version 0.1.2
  5. // @description Mark the current page CVE
  6. // @author Kali-Team
  7. // @match *://*/*
  8. // @exclude https://scap.kali-team.cn/*
  9. // @icon https://avatars.githubusercontent.com/u/99640169?s=200&v=4
  10. // @grant none
  11. // @run-at document-idle
  12. // @homepage https://github.com/cn-kali-team/mark-cve
  13. // @license GPL-3.0-only
  14. // ==/UserScript==
  15.  
  16. (function() {
  17. 'use strict';
  18. let DefaultBaseUrl = 'https://scap.kali-team.cn/cve/';
  19.  
  20. function GetBaseURL() {
  21. const KeyName = 'base_url';
  22. if (typeof browser === "undefined") {
  23. return DefaultBaseUrl;
  24. }
  25. try {
  26. browser.storage.local.get(KeyName).then((item) => {
  27. DefaultBaseUrl = item.base_url || DefaultBaseUrl;
  28. });
  29. } catch (error) {
  30. console.error(error);
  31. }
  32. return DefaultBaseUrl;
  33. }
  34.  
  35. function Mark() {
  36. const userSelection = window.getSelection();
  37. const id = userSelection.toString();
  38. let cve = userSelection.getRangeAt(0).startContainer.parentNode;
  39. if (cve.getElementsByClassName("Marked").length > 0) {
  40. return;
  41. }
  42. const spanElement = document.createElement("span");
  43. spanElement.setAttribute("class", "Marked");
  44. const selectedTextRange = userSelection.getRangeAt(0);
  45. selectedTextRange.surroundContents(spanElement);
  46. const icon = document.createElement("a");
  47. icon.href = DefaultBaseUrl + id;
  48. icon.target = "_blank";
  49. const svg = document.createElement('img');
  50. svg.setAttribute("style", "background-color: rgb(154, 205, 50);");
  51. svg.src = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGNsYXNzPSJpY29uIGljb24tdGFibGVyIGljb24tdGFibGVyLWJ1ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggc3Ryb2tlPSJub25lIiBkPSJNMCAwaDI0djI0SDB6IiBmaWxsPSJub25lIi8+PHBhdGggZD0iTTkgOXYtMWEzIDMgMCAwIDEgNiAwdjEiIC8+PHBhdGggZD0iTTggOWg4YTYgNiAwIDAgMSAxIDN2M2E1IDUgMCAwIDEgLTEwIDB2LTNhNiA2IDAgMCAxIDEgLTMiIC8+PHBhdGggZD0iTTMgMTNsNCAwIiAvPjxwYXRoIGQ9Ik0xNyAxM2w0IDAiIC8+PHBhdGggZD0iTTEyIDIwbDAgLTYiIC8+PHBhdGggZD0iTTQgMTlsMy4zNSAtMiIgLz48cGF0aCBkPSJNMjAgMTlsLTMuMzUgLTIiIC8+PHBhdGggZD0iTTQgN2wzLjc1IDIuNCIgLz48cGF0aCBkPSJNMjAgN2wtMy43NSAyLjQiIC8+PC9zdmc+";
  52. icon.appendChild(svg);
  53. spanElement.appendChild(icon);
  54. }
  55.  
  56. function FindCVE() {
  57. GetBaseURL();
  58. if (DefaultBaseUrl.startsWith(location.hostname)){
  59. return;
  60. }
  61. const regex = new RegExp('\\bCVE-\\d{4}-\\d{4,7}\\b', 'gmi');
  62. document.designMode = "on";
  63. const sel = window.getSelection();
  64. sel.collapse(document.body, 0);
  65. let m;
  66. while (m = regex.exec(document.body.innerText)) {
  67. while (window.find(m)) {
  68. Mark();
  69. }
  70. }
  71. document.designMode = "off";
  72. }
  73.  
  74. FindCVE();
  75. })();