angular - Angular 服务私有字段是否安全?
问题描述
我对构建安全的 Web 应用程序有点陌生,尤其是那些基于 JS 构建的应用程序。
我正在编写这个基于 Angular 的应用程序,我听说了很多关于访问令牌如何轻松通过 Web 浏览器的本地存储泄漏的事情。
我知道,我应该避免使用本地存储,而应该使用会话存储,但我认为整个画面中缺少一些东西。
如果我要使用 Angular 服务进行身份验证,我可以使用该服务中的私有字段来存储我的令牌吗?有没有办法泄露该服务的内容?情况如何?我来自 Java,所以我的主要假设是访问私有字段是“困难的”。
我面临哪些缺点?更改页面或转到另一个站点然后返回后,存储在该私有字段中的值是否会持续存在?
解决方案
您没有将令牌存储在 localStorage 中是正确的。您一定已经找到了很多关于此的材料(否则,这是一个很好的帖子:https ://security.stackexchange.com/questions/209174/is-localstorage-a-security-liability-for-jwts )。
你的问题是不同的。请记住,private
字段只是 Typescript 为变量在运行时的可见性提供的语义。
防止您自己的代码从类外部、代码内部直接访问变量并破坏您想要在自己的代码上强制执行的体系结构只是一种语义。
在您的代码中使用的任何值的范围都仅限于您的应用程序的当前执行(通常只要选项卡处于打开状态),当然还有它自己在 Typescript 代码中的范围。
您正在谈论的是应用程序的单独执行之间的持久性。因此,private
变量的设置与攻击者可以访问它无关。它是您的代码避免错误,强制执行合理的编程模式的一种方式。
推荐阅读
- firebase - 如何计算每个用户的 Firebase 存储消耗?
- hive - 用于 hive 的 dremio 中的等效 collect_set 函数
- tableau-api - 如何在本地 Tableau Server 中添加自定义登录和注销页面?
- c# - 将 \\/ 和 \\r 分别替换为 \/ 和 \r 的规则
- cmake - 尝试将 spdlog 静态库与 cmake 链接时出错
- javascript - 如何制作一个不和谐的机器人来复制带有 ID 的用户名?
- javascript - 如何循环数组并用旧数组设置新数组?使用类型为 Date 的钩子 useState
- tfs - TFS 发布 - 以不同的时间表将相同的工件部署到不同的客户端
- jupyter-notebook - How to Disable Multicursor in Jupyter Notebook
- python - Unable to uninstall locust from system