如何在Angular JS中保护客户端数据?

时间:2015-11-10 06:33:57

标签: angularjs security

我开发了单页AngularJS应用程序。对于数据检索/存储,它通过https与REST API进行通信。根据客户要求,我需要实现客户端身份验证。即,由于应用程序基于REST API,我们如何确保对API的请求来自有效的客户端,而不是来自fiddler或脾气的客户端。

目前的做法是:

1>在角应用程序中配置客户端密钥和密钥。

2 - ;通过使用此客户端密钥和密钥从服务器请求令牌来验证客户端。

3>服务器检查此密钥和密钥,如果验证,则使用新生成的令牌进行响应。

4>来自angularjs app的所有进一步请求都会在标头中携带此标记,以确保请求来自有效的客户端。

但这还不够好,因为攻击者可以使用fiddler轻松捕获请求,也可以轻松读取客户端密钥和密钥。或者可以使用firebug进行调试。

是否有任何安全的方法来验证客户端应用程序?

3 个答案:

答案 0 :(得分:0)

如果您的REST API调用已被任何用户身份验证屏蔽,则无法实现安全性。我的意思是,如果用户需要输入用户名/密码,那么他们就可以调用这些API,然后你可以实现一些安全性。

但如果您的要求如下:

任何具有任何浏览器的GUEST用户都会打开您的应用程序页面,实习生会调用您的REST API。

然后没有安全感。由于任何攻击者都可以拦截您的请求/响应并进一步调用它。

注意:从安全角度来看,无论浏览器能做什么,任何优秀的攻击者都可以这样做。

但是如果您使用用户名/密码验证来屏蔽REST CALL页面,那么您可以通过正确的会话验证来限制来自服务器端的调用。

答案 1 :(得分:0)

JSON Web令牌(JWT - 发音为 jot )可能是您正在寻找的内容。 Auth0有一个膨胀blog post,专门针对AngularJS + JWT。

答案 2 :(得分:0)

您无法相信客户验证任何内容。如果用户正在使用Firebug或Fiddler来欺骗"然后,您只需验证信息服务器端以确保其有效。

您可以信任客户端以保证用户的会话安全(在某种程度上),但如果您无法信任该用户,则您无法信任客户端发送给您的任何内容。

如果您需要确保客户端保存的数据的完整性,您可以使用MAC(消息验证代码),它实际上是附加到服务器端密钥的消息的散列,可以在以后使用验证。有时这是(错误地)称为签名。 JWT是目前实现这一目标的标准。

这取决于一天结束时您试图保护您的应用程序安全的威胁 - 如果它是在客户端上运行的高分的游戏,那么您可以采取的措施不足以防止用户在将分数发送到服务器之前改变其分数。如果您需要信任此类数据,请在服务器端运行。