来自@ require'd脚本的@grant GM函数

时间:2019-01-28 21:08:41

标签: javascript greasemonkey tampermonkey greasemonkey-4

我正在编写一系列Greasemonkey脚本。这些脚本具有大多数功能,因此我认为提取通用功能很有用。

common.js中的常见功能,它们称为GM_functions(例如GM.xmlHttpRequest)。每个用户脚本@require [...]/common.js

有没有一种方法可以避免在每个script.user.js中重复所有元数据:

// @require      [...]/common.js
// @grant        GM.getResourceText
// @grant        GM.xmlHttpRequest
// @grant        GM.setValue
// @grant        GM.getValue
// @connect      localhost
// @resource     styleSheet [...]/style.css

我尝试在@grant中使用common.js(或称其为common.user.js),但似乎Greasemonkey还是忽略了它。

我知道这可以视为安全漏洞,因为您可能不知道由于@require的级联@grants而最终授予了哪些特权。但是Greasemonkey可以从逻辑上从所有@required脚本中推断出最终特权。

我对@resource有相同的问题。

1 个答案:

答案 0 :(得分:1)

这不太可能发生。

  1. 对此的需求很小。
  2. 对它的需求更少。
  3. 这将是一个巨大的安全难题:

    1. 各种引擎已经在向用户发出有关脚本正在试图做的恶作剧的警报,并且大多数用户还是会忽略它。
    2. 确保先前良好的@require d文件不会损坏。大多数引擎和脚本甚至都没有首先检查subsource integrity(哈希)。如果@require可以更改元数据,那就糟了十倍。
    3. 仅确定最终许可权将是一个挑战。在此之前,所有用户密码引擎都有更重要/紧迫的代码要编写。

我理解以模块化和DRY方式进行编码的愿望,但是功能强大的@require文件不是答案。


您可能可以设置构建环境(EG Git ),以便在其组装最终@grant文件时自动为某些@require d个文件添加.user.js

如果您没有这样的构建/源跟踪环境,那么您courting disaster仍然拥有超强(或任何)模块。