【问题标题】:How to prevent Malicious user to take token from localStorage to call REST API如何防止恶意用户从 localStorage 中获取令牌来调用 REST API
【发布时间】:2019-04-08 04:19:46
【问题描述】:

这是更概念性的问题 - 当我们使用像 Angular 这样的 SPA 时,我们使用隐式流进行身份验证。在这个流程中,我们将令牌存储在 localStorage 或 sessionStorage 中。

当我们需要调用任何 API 时,我们会将该访问令牌传递给该 API 以获取数据或 POST 数据。

我有一个问题 - 如果任何恶意用户发现了该令牌,那么他可以使用邮递员或任何其他客户端使用一些垃圾数据进行数千次 POST API 调用。

我们怎样才能避免这种情况?
提前谢谢!!!!

我知道一些类似 REST API 的东西可以实现 CORS 来解决这个问题。 当有人调用 API 时,我们可以检查 ORIGIN Header。

但我读到 ORIGIN Header 也不安全。恶意用户可以通过代码轻松设置它,并且可以通过编程方式调用 API。那么如何处理这样的情况呢?

详情请看下图 -

Detailed Description of Problem Statement

【问题讨论】:

  • 使用 https,经常刷新令牌,实现某种过滤器,如果每个间隔的请求太多,令牌就会失效。
  • @maljukan - 感谢 maljukan 的回复。我们已经在 REST API 中实现了节流。但是如果有人每隔 10 分钟左右发布一些垃圾数据呢???
  • @sudarshan1933 你到处都在拍摄。您在评论中引用的内容与您的问题无关。它是需要缓解DDOS attacks 的主机。他们有他们的工具。你不应该也不能在应用程序级别处理 DDOS。

标签: angular angular5 local-storage session-storage stateless


【解决方案1】:

许多 SPA 应用程序支持 JSON Web Token(JWT) 令牌,通常用户身份验证将在授权服务器中进行,该服务器将返回 JWT 令牌。使用 JWT 令牌,前端应用程序可以作为 Header Auth Token 的一部分发送。

通常令牌将存储在会话/本地存储中,以维护有状态的会话 b/w 客户端和服务器。

由于客户端框架不提供更多安全性。这些 Token 验证需要在后端处理。

1) 启用 CORS,因此只有特定域名 (https://example.com) 才能允许您使用“Access_control_allow_origin”访问 API。

2)如果攻击者窃取了令牌,他将通过另一个域访问,后端服务器可以根据来源拒绝。

3) 如果您想要更高的安全性,您可以选择公钥/私钥身份验证,这样会更安全。

【讨论】:

  • 非常感谢@Suresh Kumar Ariya
  • 但我读到 ORIGIN Header 也不安全。恶意用户可以通过代码轻松设置它,并且可以通过编程方式调用 API。那么如何处理这样的情况呢?
  • 当我们调用任何 API 到后端时,会有 2 个请求,第一个是没有响应的 Options Request,它将验证 Host/Origin 是否被授权。第二个请求是带有 API 响应的正确请求。破解这个非常困难。
  • 如果任何攻击者试图访问 API,第一个请求(OPTION)请求将失败,这将阻止第二个请求。
猜你喜欢
  • 2013-09-08
  • 2015-04-06
  • 1970-01-01
  • 2020-05-10
  • 2023-01-10
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
相关资源
最近更新 更多