【问题标题】:Angular 2 Route Guard / Auth Guard SecurityAngular 2 Route Guard / Auth Guard 安全性
【发布时间】:2017-07-16 13:10:48
【问题描述】:

我刚刚在 Angular 大学完成了关于 Angular 2 和 Firebase 的 Angular 2 课程。

讲师 Vasco (@angular-university) 提出 Router Guard 不安全,您可以绕过它,因为它是一个前端框架。

我们使用 Firebase 身份验证来了解用户是否经过身份验证,并设置安全规则以防止读取/写入,除非用户经过身份验证。所以,我知道数据受到保护。

但是,这条路线真的安全吗?他提到使用服务器后端来提高安全性,但没有详细说明。

我一直在尝试四处搜索,但我无法看到其他人在哪里提出了这个问题。

归根结底,Angular 2 路由器保护本身是安全的,还是您必须实施服务器来保护路由?无论如何,用户将如何绕过路由?

谢谢!

【问题讨论】:

    标签: angular authentication firebase


    【解决方案1】:

    您描述的问题并非特定于 Angular。所有 JavaScript 应用程序都面临同样的安全问题。

    Vasco 正确地强调了路线守卫只是部分安全。它们只是在客户端浏览器中执行的一段代码。如果用户可以修改这段代码(例如在他们的浏览器内存中),他们可能会改变它的工作方式。

    实际上这并不容易,因为部署的代码会被缩小、丑化、捆绑……但在较低级别上,您的 Angular 应用程序只是位于服务器上的一堆静态 HTML/JS/CSS 文件。这些文件通常可以公开访问:任何知道其 URL 的人都可以下载它们并浏览它们的源代码。问问自己如果有人阅读您的应用文件的源代码,您会面临哪些风险。切勿将敏感信息存储在这些文件中。

    作为一般规则,如果您已经保护了您的后端,那么您已经完成了大部分工作。想象一下,一个恶意用户找到了一种方法来激活您的一条受保护的路线。后端仍然不会为此路由返回任何数据,并且页面上不会显示任何内容。相反,您应该注意任何敏感操作都会咨询后端(例如,不要让用户仅仅因为他们可以看到并点击浏览器中的“转账”按钮而让他们转账;后端应该验证他们已经过身份验证并且他们有足够的资金)。

    现在,如果您想要额外的安全层,您可以要求用户经过身份验证才能访问您应用的静态资产(index.html.js 文件...),但您需要使用支持该功能的服务器(Firebase 托管不支持 AFAIK),实际上这很少需要。

    退后一步,保护单页应用不仅仅是保护其路线。有跨站脚本、点击劫持等。

    您可以查看以下资源:

    【讨论】:

    • 感谢您的彻底回复。我现在有了更好的理解。我很确定我正在遵循 angular 和 firebase 制定的指南和文档来保护用户数据和路由。希望我对破解/测试我自己的应用程序有更多的了解,而不仅仅是检查功能是否按预期执行。如您所说,如果攻击者通过了路由,则不应对其进行身份验证,并且 firebase 或其他数据库将不会返回任何数据。我会检查那些文档并检查列表。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 2017-07-24
    相关资源
    最近更新 更多