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

时间:2009-01-08 14:56:12

标签: javascript web-applications web

我正在使用在线游戏网站。有一些事件调用javascript函数,函数有一些回调动作。

这样的事,

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


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

现在任何知道这个的人都可以从浏览器的地址栏中调用此更改,这是我不想要的。

不太可能有人会这样做,但我想允许它。

无论如何都要防止这样的情况?

感谢。

P.S。我试过了,但还是不确定我是否对它进行了很好的解释。如果你没有得到什么,请告诉我。

5 个答案:

答案 0 :(得分:4)

您永远无法获得100%的保护,不受您尝试的任何技术的影响。这是一场失败的比赛。

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

HTML:

<input id="foo" type="button" />

JS:

addEvent(document.getElementById("foo"), 'click', function() {
    /// some call back, which changes something
})

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

这种技术还有很多方法,但我们不会提及那些以免我们给出邪恶的行为者的想法:)

(BTW addEvent只是一个用于添加事件处理程序的示例库函数。我确信您可以访问一个。如果不是here you go。)

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

不要担心JavaScript被调用(没有解决方法),并且在后端的前端执行相同的检查。这样你就可以忘记保护你的前端,因为你无论如何都不能......但你仍然可以阻止恶意用户doSomething不应该这样做。

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

答案 3 :(得分:0)

任何“解决方案”都会像在网页中禁用右键一样高效...对于后一个问题,我找到了至少十几种解决方法,包括在Opera中查看页面!

如果禁用此功能,可以使用Firebug,Greasemonkey,甚至是动态修改HTML的代理,更不用说使用页面的本地副本等。

答案 4 :(得分:-2)

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

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

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

 //......code
}

修改为:

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

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

     //......code
    }