Angular 可以激活安全
Angular canActivate Security
最近,我一直在思考我正在开发的应用程序的安全性。客户端基于 Angular 构建,后端为 Rails API。据我所知,普遍的共识是,如果它在客户端,假设它可以被破坏。所以这让我想知道何时以及是否应该为路由使用 canActivate
之类的东西,或者我是否应该每次在服务器上为路由请求检查授权。我想把对服务器的授权请求放在 canActivate
中,但我假设 canActivate
可以被黑客攻击以响应 true
,绕过服务器响应的需要?如果是这样,如果只是一扇玻璃门,canActivate
之类的东西有什么意义?
TL;DR: canActivate
守卫不是用于安全而是用户体验。应始终通过需要身份验证的 API 来保护数据。
假设您的应用程序具有始终可访问的登录路由和秘密 table,它显示登录用户的秘密内容:
- 登录
- 带有 AuthGuard 的 SecretsTable
AuthGuard 检查用户是否登录,如果未通过身份验证则重定向到登录。正如您所说,就像客户端的任何东西一样,这可能会受到损害。这就是为什么您的 SecretsTable 的秘密数据应该来自受保护的 API 调用。即使数据是静态的(对任何用户都一样),您也不会只将其包含在您的客户端应用程序中,而是通过此 API 调用来保护它。
那么我们需要 AuthGuard 做什么?与其说是为了安全,不如说是为了用户体验。想象一下,用户通过聊天信使收到 URL myapp.io/secrets-table
。如果我们没有 AuthGuard,用户可能会收到一条错误消息 (401) 或看到一个空的 table 视图。我们的数据受到保护,但用户体验仍然很差。更好:AuthGuard 立即重定向到登录,甚至可能在成功验证后将用户带回秘密 table。此外,我们不必为每个视图都实现此逻辑,但可以为多个受保护的路由重用我们的 AuthGuard。
最近,我一直在思考我正在开发的应用程序的安全性。客户端基于 Angular 构建,后端为 Rails API。据我所知,普遍的共识是,如果它在客户端,假设它可以被破坏。所以这让我想知道何时以及是否应该为路由使用 canActivate
之类的东西,或者我是否应该每次在服务器上为路由请求检查授权。我想把对服务器的授权请求放在 canActivate
中,但我假设 canActivate
可以被黑客攻击以响应 true
,绕过服务器响应的需要?如果是这样,如果只是一扇玻璃门,canActivate
之类的东西有什么意义?
TL;DR: canActivate
守卫不是用于安全而是用户体验。应始终通过需要身份验证的 API 来保护数据。
假设您的应用程序具有始终可访问的登录路由和秘密 table,它显示登录用户的秘密内容:
- 登录
- 带有 AuthGuard 的 SecretsTable
AuthGuard 检查用户是否登录,如果未通过身份验证则重定向到登录。正如您所说,就像客户端的任何东西一样,这可能会受到损害。这就是为什么您的 SecretsTable 的秘密数据应该来自受保护的 API 调用。即使数据是静态的(对任何用户都一样),您也不会只将其包含在您的客户端应用程序中,而是通过此 API 调用来保护它。
那么我们需要 AuthGuard 做什么?与其说是为了安全,不如说是为了用户体验。想象一下,用户通过聊天信使收到 URL myapp.io/secrets-table
。如果我们没有 AuthGuard,用户可能会收到一条错误消息 (401) 或看到一个空的 table 视图。我们的数据受到保护,但用户体验仍然很差。更好:AuthGuard 立即重定向到登录,甚至可能在成功验证后将用户带回秘密 table。此外,我们不必为每个视图都实现此逻辑,但可以为多个受保护的路由重用我们的 AuthGuard。