我有这个REST服务器(由我自己编写),它由简单的HTTP身份验证保护。
现在我使用backbone.js重新编写应用程序,我不确定如何验证我的客户端。如果我在JS用户/传递中这样做将是可见的。
那么我应该如何修改我的服务器或客户端JS以确保安全?
以前我只是给了用户&为每个请求传递给REST服务器,请指导我,谢谢。
答案 0 :(得分:29)
HTTP基本身份验证容易被窃听和中间人攻击。建议使用HTTPS。
但是,如果这不是一个选项,您可以随时将cookie发送回客户端,并在其中输入用户名/密码以防止它显示在JS文件中。不言而喻,出于安全原因,密码至少应加密/散列。然后,将在服务器端负责从cookie获取身份验证详细信息。
现在,如果您无法控制修改服务器端代码,除了将凭据详细信息隐藏在将发送用户名的全局ajaxSend()
方法中之外,您几乎没有任何选择/密码详细信息与每个AJAX请求。您可以将其放在其他.js文件中并使其难以找到,但您几乎只限于这种安全形式。虽然,饼干不会让你的生活更安全。 (如果密码经过哈希/加密,它会很好。)
你可以做的另一件事就是拥有一种稍微复杂的安全形式:让服务器在每次响应时发回一个随机数 - 这个随机数将被签署'由服务器使用服务器的密钥,您可以使用它来加密'每个请求在客户端的用户名/密码。然后,您的服务器必须不断解密凭据。这不太容易中间人,但仍然不是万无一失。
如果它是您的选项,HTTPS会为您节省上述每一项。
希望这有帮助。
更新 (根据评论): restful-ness的本质是服务器上缺少状态。即,没有会话!因此,您需要使用客户端对服务器的每个请求发送用户凭据。如果你有一个登录页面,那么很难真正做到安宁,因为没有“资源”这样的资源。叫登录。但是,您可以采取以下措施:
每个请求必须在没有服务器维持会话的情况下识别自身 - 这是无国籍的精神(和宁静的;)
答案 1 :(得分:2)
好的,我和我的同事讨论过,并提出了迄今为止最好的想法:
在客户端(站点)创建一个简单的控制器并将其命名为RESTAPI,它将作为实际REST服务器的包装器。
当用户登录您的网站时,他的会话就会被创建。 RESTAPI控制器知道HTTP Authed实际REST服务器的凭据,并代表骨干网访问REST服务器。
示例:如果我必须提取
从REST服务器/消息/发送
,现在我将在主干集合中点击此URL
网站/ RESTAPI /消息/发送
RESTAPI控制器还首先检查请求用户是否在站点上有适当的会话,以及他是否可以获取资源。
所以不用担心不安全的cookie或让你的REST服务器通过普通的JS或使用任何其他模糊的方法:)
答案 2 :(得分:0)
如果您可以访问服务器端REST代码,则可以重新设计REST身份验证。第一次,登录时通过https发布用户名/密码,然后获取会话ID,该会话ID可以在后续请求中用作cookie。