我为我的网站编写了很多javascript函数,最近我发现只需在URL栏上编写javascript:FunctionName();
即可调用这些函数。调用这样的函数可能对我的网站很脆弱,那么有什么方法可以防止这种情况发生吗?有什么方法可以停止在地址栏上使用Javascript吗?
任何微妙的方法也可以像检测函数调用的任何方法一样有用,如果它不是来自地址栏那么函数应该运行,否则它不会运行?
我尝试在Facebook上的地址栏上使用Javascript,但它不起作用。所以必须有办法阻止这个..
答案 0 :(得分:2)
我同意其他评论者发现“对函数的调用在哪里以及它是否来自地址栏然后函数应该运行”是一种不好的方法来处理客户端安全性,只要有这样的事情。
那就是说,函数范围,闭包以及它与URL栏的关系是一个有趣的话题。 Here's some more context on global variables and scope。简短的版本是,如果你有这样的功能:
function test (argument) {
alert('hey')
}
它可以通过URL栏执行,因为它位于窗口/全局范围内,这似乎就像javascript URI一样。如果你把相同的函数放在一个闭包中:
(function() {
function test (argument) {
alert('hey')
}
})()
...只要在URL栏中执行该功能,就应该无法访问。
我很想知道为什么浏览器供应商通过URL实现Javascript的历史...它现在具有bookmarklet等的实际用法,但它似乎没有很好地记录。< / p>