【问题标题】:Is Angular service private field secure?Angular 服务私有字段是否安全?
【发布时间】:2019-10-19 15:04:45
【问题描述】:

我对构建安全的 Web 应用程序有点陌生,尤其是那些基于 JS 构建的应用程序。

我正在编写这个基于 Angular 的应用程序,我听说了很多关于访问令牌如何轻松通过网络浏览器的本地存储泄漏的事情。

我知道,我应该避免使用本地存储,而应该使用会话存储,但我认为整个情况都缺少一些东西。

如果我要使用 Angular 服务进行身份验证,我可以使用该服务中的私有字段来存储我的令牌吗?有没有办法泄露该服务的内容?情况如何? 我来自 Java,所以我的主要假设是访问私有字段是“困难的”

我面临哪些缺点?更改页面或转到另一个站点然后返回后,存储在该私有字段中的值是否会保留?

【问题讨论】:

    标签: angular security token


    【解决方案1】:

    您没有将令牌存储在 localStorage 中是正确的。你一定已经找到了很多关于这方面的资料(否则,这里有一个很好的帖子:https://security.stackexchange.com/questions/209174/is-localstorage-a-security-liability-for-jwts)。

    你的问题是不同的。请记住,private 字段只是 Typescript 为变量在运行时的可见性提供的语义。

    这只是一种语义,可以防止您自己的代码直接从类外部、代码内部访问变量,并破坏您想要在自己的代码上实施的架构。

    在您的代码中使用的任何值的范围都仅限于应用程序的当前执行(通常只要选项卡处于打开状态),当然还有其在 Typescript 代码中的范围。

    您所说的是应用的单独执行之间之间的持久性。因此,变量的private 设置与攻击者可以访问它无关。它是一种让您的代码避免错误、强制执行合理的编程模式的方法。

    【讨论】:

    • 那么会话存储呢?不安全吗?
    • 会话存储在理论上与本地存储相同,只是在每次浏览器重启时重置,而不是每次浏览器完全清理。所以没有区别。例如:security.stackexchange.com/questions/209174/…。当然,这同样适用于 sessionStorage。
    【解决方案2】:

    一般来说。不要在浏览器中存储您不希望其他用户看到的任何内容。浏览器内的所有内容都暴露在电脑前,可供坐在电脑前的人访问。

    关于不同类型的存储,它们在合理范围内都是“安全的”。这意味着互联网浏览器会尽最大努力防止用户恶意使用针对这些存储介质的使用方式设置的策略和限制。例如,存储访问通常仅限于您正在查看的域或页面,因此另一个站点将无法轻松访问属于另一个域的信息。

    就会话存储而言,令牌通常是更好的选择,因为一旦页面会话关闭,数据就会被清除。这意味着其他用户以后无法打开浏览器并检索属于其他人的令牌。我已经发布了会话存储文档,让其余的事实不言自明。你现在要做的就是决定哪一个更适合你正在做的事情。

    会话存储 https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage

    本地存储 https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage

    【讨论】:

      猜你喜欢
      • 2019-06-12
      • 2020-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多