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

时间:2011-11-09 23:29:17

标签: javascript rest backbone.js

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

现在我使用backbone.js重新编写应用程序,我不确定如何验证我的客户端。如果我在JS用户/传递中这样做将是可见的。

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

以前我只是给了用户&为每个请求传递给REST服务器,请指导我,谢谢。

3 个答案:

答案 0 :(得分:29)

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

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

现在,如果您无法控制修改服务器端代码,除了将凭据详细信息隐藏在将发送用户名的全局ajaxSend()方法中之外,您几乎没有任何选择/密码详细信息与每个AJAX请求。您可以将其放在其他.js文件中并使其难以找到,但您几乎只限于这种安全形式。虽然,饼干不会让你的生活更安全。 (如果密码经过哈希/加密,它会很好。)

你可以做的另一件事就是拥有一种稍微复杂的安全形式:让服务器在每次响应时发回一个随机数 - 这个随机数将被签署'由服务器使用服务器的密钥,您可以使用它来加密'每个请求在客户端的用户名/密码。然后,您的服务器必须不断解密凭据。这不太容易中间人,但仍然不是万无一失。

如果它是您的选项,HTTPS会为您节省上述每一项。

希望这有帮助。

更新 (根据评论): restful-ness的本质是服务器上缺少状态。即,没有会话!因此,您需要使用客户端对服务器的每个请求发送用户凭据。如果你有一个登录页面,那么很难真正做到安宁,因为没有“资源”这样的资源。叫登录。但是,您可以采取以下措施:

  1. 用户访问登录页面,输入凭据并点击“登录”
  2. 使用这些凭据向服务器发送POST请求 - 可能是/ Login
  3. 让服务器返回需要进行身份验证的请求资源,并使用有效凭据设置Cookie,以便在' next'请求
  4. 每个后续请求都将通过特定操作(GET,PUT,POST,DELETE ...)定向到特定URL的相应​​资源。服务器应检查来自cookie的身份验证数据,并确定用户是否经过身份验证,并在需要时执行进一步授权以授予访问权限。
  5. 每个请求必须在没有服务器维持会话的情况下识别自身 - 这是无国籍的精神(和宁静的;)

答案 1 :(得分:2)

好的,我和我的同事讨论过,并提出了迄今为止最好的想法:

在客户端(站点)创建一个简单的控制器并将其命名为RESTAPI,它将作为实际REST服务器的包装器。

当用户登录您的网站时,他的会话就会被创建。 RESTAPI控制器知道HTTP Authed实际REST服务器的凭据,并代表骨干网访问REST服务器。

示例:如果我必须提取

  

/消息/发送

从REST服务器

,现在我将在主干集合中点击此URL

  

网站/ RESTAPI /消息/发送

RESTAPI控制器还首先检查请求用户是否在站点上有适当的会话,以及他是否可以获取资源。

所以不用担心不安全的cookie或让你的REST服务器通过普通的JS或使用任何其他模糊的方法:)

答案 2 :(得分:0)

如果您可以访问服务器端REST代码,则可以重新设计REST身份验证。第一次,登录时通过https发布用户名/密码,然后获取会话ID,该会话ID可以在后续请求中用作cookie。