移动浏览器中 Javascript 的安全性

信息安全 加密 javascript
2021-09-08 09:42:07

移动浏览器上的 Javascript 是否比其他类型系统上的 Javascript 更安全?例如,如果我有一个包含一些客户端(Javascript)加密代码的网站,目的是它只在 iPhone 上的 Safari 浏览器(独立或嵌入应用程序)或 Android 设备上的 Chrome 中运行,那么有一些可能的漏洞吗?客户端 Javascript 加密在移动领域和桌面领域一样糟糕吗?

注意事项:

  • 制作应用程序不是一种选择。这个问题专门针对移动浏览器环境的安全性。我确实意识到内置 API 会是一个更好的主意。
  • 假设托管代码的服务器保持安全,或者该人正在本地/离线运行代码。

到目前为止,这是我的想法:

  • 劫持实际传输(可通过 HTTPS 解决,MITM 除外)
  • 同源(可通过托管在专用子域上解决)

所有其他攻击(例如利用 iPhone 浏览器中的漏洞)似乎都涉及这两种攻击之一。鉴于对基于 Javascript 的加密的普遍负面态度,我一定遗漏了一些东西。我错过了什么?

1个回答

越狱的iPhone或“root”的 Android 设备在质量上与桌面系统没有区别。从服务器端,您无法知道设备是否已root;或者即使它确实是您认为的设备。无论基于 Javascript 的加密在“桌面”系统上存在什么问题,也适用于移动平台。当然,任何单个浏览器(不是平台)在这方面都可能具有或多或少的麻烦功能,但浏览器实际上跨平台相当统一(例如,iOS 上的 Safari 与 MacOS X 或 Windows 上的 Safari 共享大量代码)。

这并不意味着 Javascript 密码学天生注定要失败;只是你必须在该语言及其环境(浏览器)的限制内工作,这对那些认为需要密码学的任务有些不利。特别是:

  • Javascript 代码在客户端上运行,如果用户打算对其进行逆向工程,则无法保护其免受用户窥探(代码混淆只能让您走这么远,即不是很远)。如果您在 Javascript 代码中嵌入秘密,那么您唯一的实际保护就是祈祷。

  • Javascript 几乎无法访问平台设施,尤其是存储空间。

  • 由于 Javascript 代码不存储在本地(它可以被缓存,但缓存持续时间不能从服务器可靠地强制执行),它必须从服务器重新分配。由于通过 Internet 发送的不受保护的数据可能会被更改,因此此分发必须通过一些 HTTPS,并且天生信任服务器不会玩恶意游戏。HTTPS 的存在和对服务器的信任消除了大多数应该在客户端进行加密的原因。

    (如果您不信任服务器,那么您就不能在逻辑上使用该服务器发送的 Javascript 代码。信任服务器的问题是真实存在的——但 Javascript 不是解决方案。)

  • 对于批量计算任务(例如密码学),Javascript 性能很糟糕。

与桌面系统的情况相比,移动设备中没有什么可以显着修改这些限制。