0

好吧,这个话题的标题真的很愚蠢——但我无法用比这更好的方式来总结它。所以这是我的问题的更详细版本:

我正在创建一个小型 JavaScript 库,使开发人员能够将自定义事件的字符串发送到专用服务器(库中定义的 url)。假设该库称为“testLib”,使用该库的开发人员可以编写如下内容:

function success() {
   testLib.send("Everything OK");
}

因此,每次调用此成功函数时,都会对库中定义的服务器进行 REST 调用(POST 请求)。到目前为止,这没有问题。

但丑陋的是,每个有 firebug 或类似的人也可以调用这些“testLib.send()”方法。这真的很难看,因为这个库背后的漏洞是跟踪开发人员定义的事件。当然,服务器会负责基本的验证(来源检查、API 密钥等),但仍然:可以启动 firebug 并调用“testLib.send”方法。

有没有机会建立一个授权机制来防止“萤火虫用户”通过预定义的库方法发送休息调用?

4

4 回答 4

3

没有什么实用的。

该库在客户端的计算机上运行。你无法控制它。他们可以根据自己的喜好编辑 JS。如果他们愿意,他们可以完全绕过它并发送手工制作的 HTTP 请求(或者编写一个快速脚本来用请求轰炸服务器)。

您实施的任何真正的保护都必须在服务器上。

于 2012-08-24T22:01:27.897 回答
2

编写 Javascript 就像编写开源代码一样。FireBug 只是插件之一,它可以进入你的脚本,动态修改它,调用方法,访问变量等。事实上,你不必走那么远:大多数浏览器中的 Javascript 控制台包含一个快速评估输入框。因为 Javascript 是一个解释器,所以任何人都可以进入并为所欲为。

您有两个选择可能会使它变得更加困难(尽管肯定不是不可逾越的):

1)当你完成后,混淆和/或打包脚本——尽管大多数混淆器很容易被绕过 2)让你的方法检查谁调用了它们——看看 arguments.callee.caller 。也就是说,这在严格模式下可能会遇到问题。

正如您所说,您最好的选择是在服务器端重复任何验证。如果服务器端验证失败 - 这实际上告诉你一些事情:有人故意绕过你的 Javascript,你可以相应地处理他。

希望这可以帮助

TG

于 2012-08-24T22:05:00.650 回答
2

验证用户

如果您的应用程序在页面加载时对用户进行身份验证,那么来自客户端的每个请求都会附带身份验证 cookie,因此基本上您将能够检测到发件人是谁。

混淆和私有闭包

但是,如果您想阻止以编程方式访问该特定功能,那么您最好的选择是函数闭包以使该功能私有且不可访问,并进行一些代码混淆以防止人们明显地重写整个内容。一个很好的混淆是启用了 Base62的Javascript打包程序。

但是这种事情当然会混淆你的库,但公开访问的功能仍然可以访问。

防止匿名用户

然而。如果您希望匿名用户阻止向您的服务器发送内容,您实际上无法做到这一点,但是您可以通过让您的函数要求您的开发人员(真实用户)需要的某种注册密钥来识别未经授权的请求有,但匿名者不会。

也许在Google上找到的其他一些资源可能会有所帮助。只是为了刮擦表面。例如,XHR 允许用户发送用户名和密码来验证请求,这可能正是您所追求的。但是您应该知道得更多,因为您拥有图书馆设计而不是我们。

于 2012-08-24T22:08:01.447 回答
1

不会。因为 javascript 在客户端运行,所以您无法阻止他人读取客户端正在执行的内容并自行执行。你可以做一些事情来混淆你的电话,但这是通过默默无闻的安全- 不应该依赖。如果您想确保只有开发人员调用您的 API,他们需要在服务器端进行。

于 2012-08-24T22:01:17.800 回答