【问题标题】:How can I disable bookmarklets from being ran?如何禁止运行小书签?
【发布时间】:2020-10-23 06:39:36
【问题描述】:

在我的网站上,我想阻止运行小书签(通过单击现有书签或在 url 栏中键入 javascript,例如 javascript:alert(1))我不'不想在我的网站上运行任何自定义代码。可能没有本地方式,但是否有“黑客”可以禁用小书签的执行,甚至检测小书签的运行时间。

【问题讨论】:

    标签: javascript html bookmarklet


    【解决方案1】:

    您可以做的最好的事情是中断对(某些)全局属性的引用,防止小书签能够使用它们,例如:

    window.alert = null;
    

    如果您将其放入代码中,书签将无法使用 alert。您可以对大多数窗口属性执行相同的操作。 (为了防止您的脚本被破坏,请先保存对它的引用,例如:

    (() => {
      const alert = window.alert;
      window.alert = null;
      // rest of your script here, referencing `alert`
    })();
    

    但小书签仍然可以运行不涉及此类全局属性的 JS。此外,如果用户使用 userscript 而不是书签,他们将能够在您销毁引用之前保存对变量的引用。

    从根本上说,无法阻止任何人决心在您的网站上运行自己的 JS;它是客户的浏览器,如果他们有足够的决心,他们可以在上面运行任何他们想要的东西。这不是您可以可靠控制的事情。通常,您能做的最好的事情就是在服务器上验证用户发送的输入是否有效。不要相信来自客户端 JavaScript 代码的任何东西。

    【讨论】:

    • 是的,这与验证客户端代码无关,而且我知道可能永远不会有完整的证明方法。我只是不希望人们在我的网站上运行他们自己的代码,主要是为了反作弊。
    猜你喜欢
    • 2012-04-15
    • 2019-05-21
    • 2022-10-19
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2011-05-27
    相关资源
    最近更新 更多