不允许从地址栏调用javascript函数

不允许从地址栏调用javascript函数,javascript,web-applications,web,Javascript,Web Applications,Web,我在一家在线游戏网站工作。有一些事件调用javascript函数,该函数有一些回调操作 像这样的, <input type="button" onclick="changeSomething"/> function changeSomething() { /// some call back, which changes something } 函数changeSomething(){ ///有些人回电话,这改变了一些事情 } 现在,任何知道这一点

我在一家在线游戏网站工作。有一些事件调用javascript函数,该函数有一些回调操作

像这样的,

 <input type="button" onclick="changeSomething"/>


 function changeSomething() {
         /// some call back, which changes something 
 }

函数changeSomething(){
///有些人回电话,这改变了一些事情
}
现在,任何知道这一点的人都可以从浏览器的地址栏中调用这个changeSomething,这是我不想要的

不太可能有人会这么做,但我想允许

有没有办法防止这种情况发生

谢谢


另外,我试过了,但仍然不确定我是否解释得足够好。如果您没有收到任何信息,请告诉我。

您可以通过传递ID来检查单击的来源:

<input id="good' type="button" onclick="changeSomething(this.id)"/>

 function changeSomething(myId) {
   if(myId!='good') {
    return;
  }

 //......code
}

我认为你对此无能为力。客户端可以在他们自己的浏览器中运行他们想要的任何东西。唯一要做的就是验证服务器端的所有内容。这是所有web编程中的一个重要概念。客户端代码可以自由修改,应该作为一种额外的检查来加快速度,而不是一种安全方法。

您将永远无法从任何尝试的技术中获得100%的保护。这是一场失败的比赛

如上所述,接近目标的一种方法是完全删除onclick属性,并通过javascript绑定您的单击处理程序(即“changeSomething”):

html:

然后回调就变成匿名的(例如不再有“changeSomething”函数)。这些邪恶的用户如果不知道它的名字就不能直接调用它

这项技术还有很多解决方法,但我们不会提及这些方法,以免给作恶者提供想法:)

(顺便说一句,addEvent只是一个用于添加事件处理程序的示例库函数。我相信您可以访问一个。如果没有的话。)

任何“解决方案”都将与禁用网页中的右键单击一样有效。。。对于后一个问题,我找到了至少12个解决方法,包括在Opera中查看页面


如果您禁用此功能,您将可以解决Firebug、Greasemonkey甚至一些代理动态修改HTML的问题,更不用说使用页面的本地副本等等。

您必须在接受请求的任何后端处理此问题。假设您仅在特定条件下为用户提供
doSomething()
选项,那么您可能在数据库(或其他任何地方)中有此信息

不要担心JavaScript会被调用(没有办法解决),在前端和后端执行相同的检查。这样你就可以忘记保护你的前端,因为你无论如何都不能。。。然而,您仍然可以防止恶意用户在他们不应该做的时候做一些事情


如果您需要进一步澄清我的意思,请告诉我,但我需要更多关于您的应用程序架构的详细信息。

或者更简单,他们可以从firebug控制台调用它!这听起来像是通过默默无闻实现的经典安全。它永远不起作用。如果这是重要的(防止作弊等),考虑改变你的体系结构。我很抱歉,但这无济于事。这就像不传递id一样容易被欺骗。@Diodeas然后你可以调用as:changeSomething(document.getElementById('good'))来教育提问者解决方法:你可以向页面添加javascript函数(在Firefox中,javascript shell bookmarklet可以做到这一点)您可以使用与上述事件处理程序相同的代码创建自己的函数。此外,您还可以查询元素以找到其处理程序。我认为这会使它更加模糊,效果更好。我还将对addEvent的调用放在一个单独的.js文件中,而不是放在.html文件中。即使没有安全问题,我的目标是页面本身零javascript。是的,我在客户端和服务器端都添加了检查。谢谢。
<input id="good' type="button" onclick="changeSomething(this)"/>

     function changeSomething(myId) {
       if(myId.id!='good') {
        return;
      }

     //......code
    }
<input id="foo" type="button" />
addEvent(document.getElementById("foo"), 'click', function() {
    /// some call back, which changes something
})