我有这个应用程序,它由一个REST后端组成,用于服务HTML5 5/JavaScript客户机(我也正在构建)的请求。
我计划实现一种使用基本身份验证的身份验证机制,其中JavaScript客户端将在会话期间存储Basic 64编码的用户凭据。这些凭据将与每个REST请求一起在“授权:基本”头中发送。
JavaScript客户端和REST后端之间的所有会话都将发生在HTTPS上。我知道这本身就是一个性能缺陷,因为它增加了加密/解密每个请求/响应的开销,现在还可以。
我现在真正感兴趣的是它的安全方面。我知道我描述的模式并不新奇,很多人在他们的实现中都使用了它(至少这是我的理解)。但是,我想知道是否有人遇到过任何安全漏洞或缺陷。
我唯一能想到的是,如果客户端的恶意代码能够以某种方式访问存储的凭据…的话。我认为这是非常不可能的(但是黑客是一群有创意的人,一些JS引擎是有问题的,所以你永远不会知道:-)。有什么想法?
发布于 2015-03-18 06:06:45
“硬”凭据不应该存储在Javascript可以访问的区域,否则就会对XSS攻击敞开心扉。
我建议使用访问令牌并将它们存储在HTTPS专用cookie中。您可以对访问令牌进行最初的硬凭据交换,然后对后续请求使用令牌(这是时间限制的)。
我写了一篇关于这个问题的长篇文章,它详细地介绍了我的回答:基于令牌的单页应用程序认证
希望这能有所帮助!
发布于 2015-03-17 21:19:30
CORS问题(假设您正在对同一个域进行rest调用),最关心的是客户端需要在javascript中拥有凭据。任何人都可以阅读您的代码并使用它们(正如您已经指出的那样)。
即使凭据只是用户自己的,客户端的任何东西都可能通过跨站点脚本或任何可以操作DOM的浏览器插件(例如selenium测试IDE)而面临暴露的危险。
发布于 2015-03-18 08:55:37
基本身份验证是非常基本的;-)您并不真正控制会话,.这里有一个关于RESTful服务的更高级方法(基于令牌的身份验证)的链接:https://templth.wordpress.com/2015/01/05/implementing-authentication-with-tokens-for-restful-applications/。
否则,我同意之前Robert的回答,即在客户端存储凭据(XSS攻击)时,我们需要非常小心。
cookies的问题在于您的客户端需要一个浏览器来透明地利用这个特性.如果是这样的话,你可以利用这个。如果向任何REST客户端开放,这可能是一个问题,因为客户端需要手动处理cookie。此外,它并不是RESTful服务中更好的身份验证方法;-)
我没有看到其他方法(cookies除外)以方便和灵活的方式在SPA中实现身份验证。请注意,JavaScript框架(如角)提供了防止XSS攻击的支持。
关于这个问题,我在这里给出一个答案:是否有任何安全的方法将rest令牌保存在SPA的客户端?。
希望它能给你的问题提供提示。蒂埃里
https://stackoverflow.com/questions/29109848
复制相似问题