首页 > 解决方案 > 如何禁止运行小书签?

问题描述

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

标签: javascripthtmlbookmarklet

解决方案


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

window.alert = null;

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

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

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

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


推荐阅读