【问题标题】:AngularJS Secure Storage MediaAngularJS 安全存储媒体
【发布时间】:2015-08-30 09:50:47
【问题描述】:

我正在使用 AngularJS 开发客户端应用程序。我需要从服务器端请求一些与授权相关的数据,并将其存储以用于访问控制决策。我不想在每个决定之前都请求数据。

我尝试使用浏览器本地存储,但我发现它可以在浏览器中进行编辑,这在我的情况下是不可接受的。我也考虑过加密授权数据,但只要加密是在​​客户端完成的,就可以进行逆向工程。

是否有安全(只读)存储可以保存授权数据以适应我的情况?

【问题讨论】:

  • 它是单页应用程序吗?还是要在页面刷新之间存储信息?
  • 是的,它是一个单页应用程序。
  • 那为什么不将这些信息存储在服务中并使用它呢?
  • 现在就是这样。问题是它几乎在每次状态更改过多时都会被调用(考虑到该应用程序将被数十万人使用)。因此,我需要在应用程序初始化期间调用它一次并将其存储在安全媒体上。
  • 您可以在初始化期间调用一次,并将其作为 javascript 值存储在服务中。 :)

标签: javascript angularjs security ng-storage


【解决方案1】:

您将数据发送到客户端,这是一个您无法控制的环境。你能做的最多就是让他们不方便修改它。

为了让它无法修改?你不能这样做。 (抽象地思考这个问题:你试图做的是禁止用户在他自己的设备上做一些操作。)

这就是为什么各种与安全相关的功能都需要留在后端(您可以控制的环境),或者至少包含一个后端组件。

在您的特定情况下,将客户端的查看权限视为一种可用性功能:您不想将用户引导到他们不应该看到的页面,但后端的责任是只提供服务他们实际上被允许访问的数据。因此,如果您有一个恶意用户去“他不应该看到的地方”,那么后端将不向他们发送他不应该看到的数据。

【讨论】:

  • 我已经在后端做了大部分的访问控制决策。我只需要在客户端管理查看权限
  • @YAM 存储在客户端的任何内容,客户端都可以修改。你不能一边吃蛋糕一边吃。
  • 我明白了。我只是想知道这种情况下的最佳做法是什么?每次请求都调用服务?
  • 将您的凭据作为 http 标头添加到每个请求中,然后检查服务器上的该标头即可。
  • @YAM 最佳实践是一个完全不同的主观问题,您可能应该为此打开一个单独的问题。 (如果是理论上的讨论,可能更适合programmers,如果你想对某个实现发表意见,code review)。
猜你喜欢
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 2018-01-30
  • 2015-11-18
  • 2017-06-24
  • 2019-12-15
  • 1970-01-01
相关资源
最近更新 更多