javascript - 通过 Backbone.js 安全访问经过身份验证的 REST 服务器?

标签 javascript rest backbone.js

我有这个 REST 服务器(由我自己编写),它通过简单的 HTTP 身份验证来保护。

现在我使用 backbone.js 重新编写了应用程序,但我不确定如何对我的客户端进行身份验证。如果我在 JS 中这样做,用户/密码将是可见的。

那么我应该如何修改我的服务器或我的客户端 JS 以确保安全?

以前我只是为每个请求向 REST 服务器提供用户并传入 PHP,请指导我,谢谢。

最佳答案

HTTP 基本身份验证容易受到窃听和中间人攻击。建议使用 HTTPS。

但是,如果这不是一个选项,您始终可以将 cookie 发送回客户端并在其中输入用户名/密码,以防止它显示在 JS 文件中。不用说,出于安全原因,密码至少应该加密/散列。然后,服务器端将有责任从 cookie 中获取身份验证详细信息。

现在,如果您对修改服务器端代码没有任何控制权,那么除了将凭据详细信息埋入全局 ajaxSend() 方法之外,您几乎别无选择随每个 AJAX 请求发送用户名/密码详细信息。您可以将它放在其他一些 .js 文件中并使其难以找到,但您几乎只能使用这种形式的安全性。虽然,cookie 不会让您的生活更安全。 (如果密码经过哈希处理/加密会更好)。

您可以做的另一件事是使用一种稍微复杂的安全形式:让服务器在每次响应时发回一个随机数——随机数将由服务器使用服务器的 key “签名”,您可以使用为每个请求“加密”客户端的用户名/密码。然后,您的服务器将不得不不断地解密凭据。这不太容易出现中间人,但仍然不是万无一失的。

如果您可以选择 HTTPS,它可以让您免于上述每一种情况。

希望这对您有所帮助。

更新 (根据评论): Restful 本质是服务器上没有状态。即,没有 session !因此,您需要在客户端对服务器发出的每个请求中发送用户凭据。如果您有一个登录页面,那么很难真正平静下来,因为没有称为登录的“资源”。但是,您可以执行以下操作:

  1. 用户访问登录页面,输入凭据并点击“登录”
  2. 使用这些凭据向服务器发送 POST 请求 - 可能是/Login
  3. 让服务器返回需要身份验证的请求资源,并使用有效凭据设置 cookie 以在“下一个”请求中使用
  4. 每个后续请求都将定向到具有特定操作(GET、PUT、POST、DELETE...)的特定 URL 上的相应资源。服务器应检查 cookie 中的身份验证数据并确定用户是否已通过身份验证,并在需要时执行进一步的授权以授予访问权限。

每个请求都必须在不让服务器维护 session 的情况下标识自己——这就是无状态(和 Restful ;)的精神

关于javascript - 通过 Backbone.js 安全访问经过身份验证的 REST 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8073193/

相关文章:

javascript - 如何通过php中的函数在浏览器中打印插入查询

javascript - 即 11 + angularjs 没有从 angular.element ("#idName"中找到范围)

switch 语句中的 JavaScript case 语句

python - 发布到 AWS S3 签名不匹配错误

javascript - jQuery 可选择阻止点击事件传播

javascript - 没有让这个主干路由器工作

javascript - Jquery自定义函数问题

RESTful 密码重置

node.js - 在 Node.JS 中使用异步/等待的正确请求

javascript - Handlebars.js 不喜欢前面的方括号