我有这个REST服务器(由我自己编写),它由简单的HTTP身份验证保护.
现在我使用backbone.js重新编写应用程序,我不确定如何验证我的客户端.如果我在JS用户/传递中这样做将是可见的.
那么我应该如何修改我的服务器或我的客户端JS是安全的?
以前我只是给了用户并通过PHP传递给REST服务器的每个请求,请指导我,谢谢.
HTTP基本身份验证容易被窃听和中间人攻击.建议使用HTTPS.
但是,如果这不是一个选项,您可以始终将cookie发送回客户端并在其中输入用户名/密码以防止它显示在JS文件中.不言而喻,出于安全原因,密码至少应加密/散列.然后,onus将在服务器端从cookie获取身份验证详细信息.
现在,如果您对修改服务器端代码没有任何控制权,那么除了在全局ajaxSend()
方法中隐藏凭证详细信息之外,您几乎没有任何选择,该方法将在每个AJAX请求中发送用户名/密码详细信息.您可以将其放在其他.js文件中并使其难以找到,但您几乎只限于这种安全形式.虽然,饼干不会让你的生活更安全.(如果密码经过哈希/加密,那就太好了).
你可以做的另一件事就是有一个稍微复杂的安全形式:让服务器在每次响应时发回一个nonce - 服务器使用服务器的密钥对nonce进行"签名",你可以使用它来'加密'每个请求在客户端的用户名/密码.然后,您的服务器必须不断解密凭据.这不太容易中间人,但仍然不是万无一失.
如果它是您的选项,HTTPS将为您节省上述每一项.
希望这可以帮助.
更新 (根据评论):restful-ness的本质是服务器上缺少状态.即,没有会议!因此,您需要使用客户端对服务器的每个请求发送用户凭据.如果你有一个登录页面,那么很难真正做到安宁,因为没有名为登录的"资源".但是,这是你可以做的:
用户访问登录页面,输入凭据并点击"登录"
使用这些凭据向服务器发送POST请求 - 可能是/ Login
让服务器返回需要身份验证的请求资源,并使用有效凭据设置cookie以在"下一个"请求中使用
每个后续请求都将通过特定操作(GET,PUT,POST,DELETE ...)定向到特定URL的相应资源.服务器应检查来自cookie的身份验证数据,并确定用户是否已通过身份验证,并在必要时执行进一步授权以授予访问权限.
每个请求必须在没有服务器维持会话的情况下识别自己 - 这就是无国籍的精神(和宁静;)