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