开发人员的最佳安全做法

Adobe AIR 1.0 和更高版本

虽然 AIR 应用程序是使用 Web 技术构建的,但开发人员应知道这些应用程序并非在浏览器安全沙箱中运行,这一点很重要。这意味着,可以构建会对本地系统有意或无意产生损害的 AIR 应用程序。AIR 会尝试最大程度降低此风险,但仍存在一些可能引入漏洞的方式。本主题介绍了重要的潜在不安全因素。

将文件导入应用程序安全沙箱的风险

位于应用程序目录中的文件会被分配到应用程序沙箱中,并具有运行时的完全权限。建议将写入本地文件系统的应用程序写入 app-storage:/ 中。此目录与用户计算机上的应用程序文件位于不同的位置,因此这些文件不会分配到应用程序沙箱中,并且安全风险的程度会降低。建议开发人员考虑以下问题:

  • 仅在必要时才在 AIR 文件(位于安装的应用程序中)中包含文件。

  • 仅在脚本文件的行为被完全理解和信任时才在 AIR 文件(位于安装的应用程序中)中包含该脚本文件。

  • 不要向应用程序目录中写入内容或修改其中的内容。运行时会阻止应用程序通过引发 SecurityError 异常,写入或修改使用 app:/ URL 方案的文件和目录。

  • 不要将网络源中的数据用作可能引起代码异常的 AIR API 的方法的参数。其中包括使用 Loader.loadBytes() 方法和 JavaScript eval() 函数。

使用外部源确定路径的风险

使用外部数据或内容可能会破坏 AIR 应用程序。因此,使用网络或文件系统中的数据时应特别小心。信任最终由开发人员及其构建的网络连接进行保障,但加载外部数据本身就具有风险,不应在敏感操作中使用此输入。建议开发人员不要执行以下操作:

  • 使用网络源中的数据确定文件名

  • 使用网络源中的数据构建应用程序用来发送私人信息的 URL

使用、存储或传输不安全凭据的风险

将用户凭据存储在用户的本地文件系统中将引入可能破坏这些凭据的风险。建议开发人员考虑以下问题:

  • 如果凭据必须存储在本地,请在写入本地文件系统时对凭据进行加密。运行时通过 EncryptedLocalStore 类提供了对每个安装的应用程序都唯一的加密存储。有关详细信息,请参阅 加密的本地存储区

  • 除非网络源可信并且使用 HTTPS: 或传输层安全 (TLS) 协议进行传输,否则不要将未加密的用户凭据传输到网络源。

  • 永远不要在创建凭据时指定默认密码,应让用户自己创建密码。保留默认值不变的用户将其凭据暴露在已了解默认密码的攻击者面前。

降级攻击的风险

在安装应用程序过程中,运行时会检查以确保应用程序的版本不是当前安装的版本。如果应用程序已经安装,则运行时会比较版本字符串与已安装的版本。如果此字符串不同,则用户可以选择升级安装。运行时不保证新安装的版本比旧版本新,仅保证版本不同。攻击者可能会向用户分发旧版本以避开安全漏洞。因此,建议开发人员在运行应用程序时检查版本。最好让应用程序检查网络中是否存在所需更新。这样,即使攻击者让用户运行旧版本,该旧版本也会识别出需要更新。此外,为应用程序使用明确的版本控制方案将使欺骗用户安装降级版本变得更加困难。