假设我正在构建一个“安全”离线HTML5应用程序,该应用程序必须在Web浏览器中本地运行,而无需从服务器下载更多文件。假设我最初使用HTTPS(TLS)上的Web浏览器连接到服务器,并下载本地运行所需的HTML,JavaScript和CSS。我可以合理地假设我第一次下载它安全完成的文件,因为它是一个没有人知道的全新服务器。所有文件都存储在HTML5 Offline Application Cache中。现在,我拥有在本地运行应用程序所需的一切,不应该依赖服务器来处理任何其他事情。
现在每次运行应用程序时,应用程序都将使用HTML5离线Web应用程序清单来查看服务器是否有任何更新,以便下载应用程序。这可能是一个问题。如果攻击者现在已针对我的服务器并对连接进行了MITM攻击,则他们可能会更改应用程序清单,从而导致更新被触发,从而使客户端下载新的JavaScript和HTML。这很容易损害应用程序的安全性,因为应用程序依赖于这些文件的完整性。
有哪些可能的选项可以防止这种情况发生?我们可以做以下任何一件事:
1)在下载完所有文件后,完全禁用或阻止来自服务器的更新。然后,如果在服务器上更改清单,或者攻击者提供新清单,则客户端会忽略新清单并继续使用它的文件的本地副本。
2)检测清单是否已更改,是否已触发更新事件,或浏览器是否正在下载新文件。因此,通知用户已发生这种情况。如果用户不期望它,则表示攻击。我知道规范中列出了“下载”或“更新已完成”或“检查”事件。有没有办法让JavaScript检测到那些事件已被触发?
3)在浏览器的本地存储中存储文件的版本值或加密哈希值。然后在页面启动时,如果文件意外更改,我们可以向Web浏览器发出警报,通知用户他们已意外更改。
4)也许使用强制浏览器无限期缓存文件的some sort of cache header。换句话说,一种破解使它忽略服务器发送的新清单文件。这听起来似乎可能有效,因为有很多问题可能导致应用程序即使更改清单文件也不会更新。
提前谢谢。