Ste*_*ler 3 javascript regex permissions include userscripts
Tampermonkey 在我的用户脚本的语句中有一个弃用警告@include:
// @include /https\:\/\/([a-z\.]*\.)?(((stackexchange|askubuntu|superuser|serverfault|stackoverflow|stackapps)\.com)|(mathoverflow\.net))\/.*/
// @exclude /^https://(chat|api|data)\./
// @exclude https://stackexchange.com/*
Run Code Online (Sandbox Code Playgroud)
eslint: userscripts/better-use-match - 使用 @include 可能不安全,并且可能会在 2023 年初的 Manifest v3 中过时。请切换到 @match。
或多或少等于@include 标签。您可以在这里获取更多信息。注意:该
<all_urls>语句尚不支持,scheme 部分也接受http*://.允许多个标签实例。
然而,尽管有这些不太有用的文档,但它们根本不等同。这不起作用:
// @match /https\:\/\/([a-z\.]*\.)?(((stackexchange|askubuntu|superuser|serverfault|stackoverflow|stackapps)\.com)|(mathoverflow\.net))\/.*/
Run Code Online (Sandbox Code Playgroud)
这里的链接根本没有提到正则表达式!如何将此正则表达式转换为在 中使用 @match?
@match根本不支持正则表达式,它只支持通配符。您需要将正则表达式转换为多个 glob。
处理的方式@match是将指令分为三个部分,并分别针对 URL 的各个部分进行匹配:
// @match PROTOCOL://HOSTNAME/PATH
Run Code Online (Sandbox Code Playgroud)
这与 include 的执行方式不同,其中 include 指令与整个 URL 进行匹配。请参阅: 用户脚本中@include 和@match 之间有什么区别?
// @include https://*.example.com/*存在潜在的安全漏洞,因为攻击者可以制作这样的 URL,https://attacker.example/?.example.com从而允许您的用户脚本在攻击者的域上运行。根据您的用户脚本的用途,攻击者可能会允许攻击者恶意使用您的脚本来窃取用户的数据、攻击您的用户或将其用作 DDOS 的一部分。
如果您的正则表达式在多个不同的域之间进行选择,则需要将@include正则表达式分解为许多@match带有全局变量的指令。请注意,匹配主机名时,*.stackoverflow.com 也会匹配stackoverflow.com没有子域的情况。
// @match https://*.stackexchange.com/*
// @match https://*.stackoverflow.com/*
// @match https://*.askubuntu.com/*
// @match https://*.superuser.com/*
// @match https://*.serverfault.com/*
// @match https://*.mathoverflow.net/*
// @match https://*.stackapps.com/*
// @exclude /^https://(chat|api|data)\./
// @exclude https://stackexchange.com/*
Run Code Online (Sandbox Code Playgroud)
由于 glob 的表达能力不如正则表达式,因此某些@include指令将无法表示为@match. 如果您使用正则表达式来匹配站点上非常具体的 URL 路径,则可能必须将用于确定用户脚本是否应在特定路径上运行的逻辑移至规则@exclude或脚本本身中。
对于主机名的通配也有新的限制。通配符必须出现在开头,并且后面必须跟一个.。example.*因此,不可能将所有 TLD 与 匹配,也不可能匹配部分域名(例如*example.com. 有关完整详细信息,请参阅Google 的匹配模式文档。
注意:如果您之前使用过@exclude指令,则无需对其进行任何更改。该@exclude指令并未被弃用。因为它排除域而不是包含域,@exclude所以引入安全漏洞的可能性要小得多。
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |