Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
编写JavaScript库:如何授权方法?_Javascript_Rest_Authorization - Fatal编程技术网

编写JavaScript库:如何授权方法?

编写JavaScript库:如何授权方法?,javascript,rest,authorization,Javascript,Rest,Authorization,好吧,这个话题的标题真的很愚蠢——但我不能用比这个更好的方式来总结它。下面是我的问题的更详细版本: 我正在创建一个小型JavaScript库,使开发人员能够将自定义事件的字符串发送到专用服务器(库中定义的url)。假设该库称为“testLib”,使用该库的开发人员可以编写如下内容: function success() { testLib.send("Everything OK"); } 因此,每次调用这个success函数时,都会对库中定义的服务器进行REST调用(POST请求)。到目

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

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

function success() {
   testLib.send("Everything OK");
}
因此,每次调用这个success函数时,都会对库中定义的服务器进行REST调用(POST请求)。到目前为止,这没有问题

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


是否有机会构建一种授权机制,以防止“firebug用户”通过预定义的库方法发送rest调用?

否。因为javascript在客户端运行,所以您无法阻止他人读取客户端正在执行的内容并自行执行。你可以做一些事情来混淆你的电话,但这是——而且不应该被依赖。如果您想确保只有开发人员在调用您的API,那么他们需要在服务器端执行此操作。

没有实际意义

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


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

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

你有两个选择,这可能会让事情变得有点困难(尽管肯定不是不可逾越的):

1) 完成后,对脚本进行模糊处理和/或打包-尽管可以轻松绕过大多数模糊处理程序 2) 让您的方法检查调用它们的人-查看arguments.callee.caller。也就是说,在严格模式下,这可能会遇到问题

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

希望这有帮助

TG

验证用户 如果您的应用程序在页面加载时对用户进行身份验证,那么来自客户端的每个请求都会附带身份验证cookie,这样基本上您就能够检测出发送者是谁

模糊处理和私有闭包 但是,如果您想阻止对特定函数的编程访问,那么最好的选择是函数闭包,以使该函数私有且不可访问,以及一些代码混淆,以防止人们直接重写整个函数。一个很好的混淆是启用了Base62

但是这类事情当然会使您的库变得模糊,但是公共可访问的函数仍然可以访问

防止匿名用户 不过。如果你想让匿名用户阻止向你的服务器发送东西,你真的不能这样做,但你可以识别未经授权的请求,方法是让你的功能需要某种注册密钥,你的开发者(真正的用户)会有,但其他人不会


也许在上找到的一些其他资源可能会有帮助。只是为了表面。例如,XHR允许用户发送用户名和密码来验证请求,这可能正是您想要的。但是你应该更清楚,因为你的库设计不是我们。

任何人都是指匿名用户或经过身份验证/授权的用户?匿名。就像你写了一个网站,然后使用这个库。例如,每当用户单击网站的特定按钮时,都会调用testLib.send()方法。也许你可以把它看作是一种高级的谷歌分析功能,它不仅可以跟踪页面访问(以及类似的事情),还可以跟踪自定义事件。我编辑了我的答案,以包含一些你可能会觉得有价值的更多信息。