2009-01-08 77 views
3

我正在使用在线游戏网站。有一些事件会调用一个javascript函数,并且该函数有一些回调行为。不允许地址栏中的javascript函数调用

这样的事情,

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


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

现在任何人谁知道这一点可以从浏览器的地址栏中,我不想把这种changeSomething。

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

反正有防止这种情况吗?

谢谢。

P.S.我试过了,但仍然不确定我是否足够好地解释了它。请让我知道你是否没有得到什么。

+1

或者更容易,他们可以从他们的萤火虫控制台调用它! – 2009-01-08 15:04:12

+0

这听起来像通过默默无闻的经典安全。它从来没有工作。如果这是重要的(防止作弊等),请考虑更改您的架构。 – 2009-01-08 15:05:22

回答

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

-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 
    } 
+0

javascript:changeSomething('good')有同样的问题 – 2009-01-08 15:05:09

+0

对不起,但这没有帮助。这与通过身份证一样容易欺骗。 – 2009-01-08 15:06:35

3

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

0

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

如果禁用此,一个将与萤火虫,Greasemonkey的解决办法,甚至有些代理在飞行中改变HTML,而不是使用页面的本地副本提等

1

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

不要担心被调用的JavaScript(没有办法绕过它),并且在后端的前端执行相同的检查。这样,您可以简单地忘记保护您的前端,因为您无法继续......但您仍然可以防止恶意用户在他们不应该的时候进入。

如果您需要进一步说明我的意思,请告诉我,但我需要更多关于您的应用程序体系结构的详细信息。

相关问题