【发布时间】:2020-10-23 06:39:36
【问题描述】:
在我的网站上,我想阻止运行小书签(通过单击现有书签或在 url 栏中键入 javascript,例如 javascript:alert(1))我不'不想在我的网站上运行任何自定义代码。可能没有本地方式,但是否有“黑客”可以禁用小书签的执行,甚至检测小书签的运行时间。
【问题讨论】:
标签: javascript html bookmarklet
在我的网站上,我想阻止运行小书签(通过单击现有书签或在 url 栏中键入 javascript,例如 javascript:alert(1))我不'不想在我的网站上运行任何自定义代码。可能没有本地方式,但是否有“黑客”可以禁用小书签的执行,甚至检测小书签的运行时间。
【问题讨论】:
标签: javascript html bookmarklet
您可以做的最好的事情是中断对(某些)全局属性的引用,防止小书签能够使用它们,例如:
window.alert = null;
如果您将其放入代码中,书签将无法使用 alert。您可以对大多数窗口属性执行相同的操作。 (为了防止您的脚本被破坏,请先保存对它的引用,例如:
(() => {
const alert = window.alert;
window.alert = null;
// rest of your script here, referencing `alert`
})();
但小书签仍然可以运行不涉及此类全局属性的 JS。此外,如果用户使用 userscript 而不是书签,他们将能够在您销毁引用之前保存对变量的引用。
从根本上说,无法阻止任何人决心在您的网站上运行自己的 JS;它是客户的浏览器,如果他们有足够的决心,他们可以在上面运行任何他们想要的东西。这不是您可以可靠控制的事情。通常,您能做的最好的事情就是在服务器上验证用户发送的输入是否有效。不要相信来自客户端 JavaScript 代码的任何东西。
【讨论】: