HTML5离线认证

2023-12-30

我正在寻求有关如何最好地控制对主要离线使用的 HTML5 应用程序的访问的建议/批评。

该应用程序使用 IndexedDB、本地和会话存储的组合来存储数据,以便可以离线使用。数据/页面通过 HTTPS 提供。

目的是最大限度地降低平板电脑/个人电脑丢失/被盗时数据被查看的风险。

目前,该应用程序使用斯坦福 Javascript 加密库来加密用户/密码,然后在用户能够成功通过服务器身份验证时将其保存到本地存储。如果应用程序随后离线,用户必须根据本地存储中的加密用户/密码进行“本地”身份验证。

此外,如果用户能够成功向服务器进行身份验证,则未加密的用户/密码将存储在会话存储中。这样应用程序就可以定期尝试与服务器重新建立联系并“无缝”重新进行身份验证,而无需用户重新输入其凭据。

我知道许多关于客户端加密的错误的帖子/讨论请参阅http://www.matasano.com/articles/javascript-cryptography/ http://www.matasano.com/articles/javascript-cryptography/ and http://rdist.root.org/2010/11/29/final-post-on-javascript-crypto/ http://rdist.root.org/2010/11/29/final-post-on-javascript-crypto/和 .nczonline.net/blog/2010/04/13/towards-more-secure-client-side-data-storage/ + 其他。但是我不确定这些论点如何适用于这种情况。

鉴于需要离线存储数据,我正在寻找对该方法的批评。如果有更好的方法请详细说明。

Thanks


身份验证与安全存储

我将从大的设计问题开始:你似乎处理这个问题就好像它是关于验证,其中(可能是恶意的)用户需要向您的应用程序证明她确实是有效用户。但实际上你面临的是storage问题,因为如果计算设备被盗,则包含应用程序正在使用的所有敏感信息的整个运行时环境都掌握在攻击者手中。在 JavaScript 应用程序的情况下,离线数据和代码的分析甚至比某些仅二进制代码的情况更舒适。

例如,如果我想攻击您的应用程序,我会首先查看会话存储(cookie?只需使用浏览器界面查找它们),看看是否可以在那里找到用户名和密码。如果不是,我将遵循用于解密本地存储中的密码的代码(可能使用 javascript 调试器)。根据您描述应用程序的方式,这些函数似乎可以在没有用户提供密钥的情况下解密它。也许我可以通过更改类似的内容来注释掉用户的本地身份验证if(authenticateUser()) to if(true).

因此,您真正需要做的是使用根本不存储在客户端的密钥来加密所有敏感的本地数据。例如,每次用户访问您的应用程序时都要求用户提供解密密钥,使用该密钥解密本地存储的数据(并加密您存储的每个新数据)以及闲置一段时间后将钥匙扔掉。或者,您可以在用户每次访问您的应用程序时对服务器进行身份验证,并从那里检索解密密钥,并在一段时间不活动后将其丢弃。

此时,JavaScript 环境的选择确实会阻碍您的事业,因为当您想要解密密钥消失时,您无法强制运行时环境丢弃它。即使对于 C 应用程序来说,这也足够困难了,因为您必须小心地将 RAM 交换到 HDD 上。根据应用程序使用的信息的敏感程度,要求用户在完成后关闭浏览器并假设攻击者没有足够的动机在浏览器的换出 RAM 中查找密钥可能就足够了。

本地保存登录数据

由于它是您使用的最敏感信息,因此您永远不应该将用户登录信息存储在客户端上。相反,对服务器进行一次身份验证,并从中检索身份验证令牌以供将来的交互使用。这与会话 cookie 基本相同,并且会在一段时间后过期(如果它根本没有过期,则它与密码一样有效)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5离线认证 的相关文章

  • 转义 h 轮廓

    因此 我一直在尝试找出在被较低级别的标题吸引后添加内容的最佳方法是什么 section h1 Title of Section h1 h2 Related 1 h2 h2 Related 2 h2 p I NEED THIS TO BE P
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • 两列表:一列尽可能小,另一列占据其余部分

    我在 div 中有一个 to columns 表 div table tbody tr td class action a a td td class content p Bigger text variable size p td tr
  • 如何使用 Scrapy 从网站获取所有纯文本?

    我希望在 HTML 呈现后 可以从网站上看到所有文本 我正在使用 Scrapy 框架使用 Python 工作 和xpath body text 我能够获取它 但是带有 HTML 标签 而且我只想要文本 有什么解决办法吗 最简单的选择是ext
  • JavaScript 继承;调用和原型

    要在Javascript中实现继承 通常需要执行以下两个步骤 假设我有一个基类 Animal var Animal function name this name name 我现在想从中派生一个子类 Dog 所以我想说 var Dog fu
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • IE 中的 XPath 查询使用从零开始的索引,但 W3C 规范是从一开始的。我应该如何处理差异?

    问题 我正在转换目前仅适用于 Internet Explorer 的相对较大的 Javascript 代码 以便使其也适用于其他浏览器 由于代码广泛使用 XPath 我们做了一些兼容性功能以使事情变得更容易 function selectN
  • 如何使用 Javascript 设置查询字符串

    有没有办法使用 javascript 设置查询字符串的值 我的页面有一个过滤器列表 单击该列表时 它将更改右侧的页内结果窗格 我正在尝试更新 url 的查询字符串值 因此如果用户离开页面 然后单击 后退 按钮 他们将返回到最后一个过滤器选择
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • 如何在模态打开时防止主体滚动

    我在用着W3schools 模态脚本 https www w3schools com howto tryit asp filename tryhow css modal我想添加一个功能 防止模型打开时整个主体滚动 我根据我的需要对原始脚本做
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • 使用 Vaadin Flow Web 应用程序处理全局所有布局和“路由”URL 的登录

    Vaadin 8 在 Vaadin 8 中 在我的UI子类我通过检查用户的会话是否带有一个属性来处理登录 该属性表明他们是否已成功登录 如果没有的话 我的UI子类显示登录布局 而不是带有导航选项的其他内容 例如菜单栏和在该 UI 内切换布局
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • 在 iOS 7 Safari 中,如何区分通过边缘滑动与后退/前进按钮的 popstate 事件?

    在 iOS 7 Safari 中 现在有两种后退 前进导航方式 使用底部的传统后退 前进按钮箭头或从屏幕边缘滑动 我正在使用动画在 ajax 应用程序中的页面之间进行转换 但如果用户通过边缘滑动进行导航 我不想触发该转换 因为这本身就是一个
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供

随机推荐