3

我正在与一个在线游戏网站合作。有一些事件调用了 javascript 函数,并且该函数有一些带有回调的操作。

像这样的东西,

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


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

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

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

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

谢谢。

PS我试过了,但仍然不确定我是否解释得很好。如果您没有得到任何东西,请告诉我。

4

5 回答 5

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”函数)。这些邪恶的用户不知道它的名字是不能直接调用它的!

这种技术也有一些方法,但我们不会提及那些,以免我们给坏人提供想法:)

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

于 2009-01-08T15:14:54.070 回答
3

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

于 2009-01-08T15:05:57.553 回答
1

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

不要担心 JavaScript 会被调用(无法绕过它),并在后端执行与前端相同的检查。通过这种方式,您可以简单地忘记保护您的前端,因为无论如何您都做不到......但是您仍然可以防止恶意用户doSomething在不应该这样做时进行攻击。

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

于 2009-01-08T17:12:55.703 回答
0

任何“解决方案”都将与禁用网页中的右键单击一样有效......对于后一个问题,我发现至少有十几个解决方法,包括在 Opera 中查看页面!

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

于 2009-01-08T15:47:23.960 回答
-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
    }
于 2009-01-08T15:01:59.633 回答