# 保护富 Internet 应用程序的准则

> 原文： [https://docs.oracle.com/javase/tutorial/deployment/doingMoreWithRIA/devGuidelines.html](https://docs.oracle.com/javase/tutorial/deployment/doingMoreWithRIA/devGuidelines.html)

以下准则提供了可以减少您向用户提供的富 Internet 应用程序（RIA）漏洞的步骤。

*   [遵循安全编码指南](#coding)
*   [使用最新版本的 JRE 进行测试](#latestJRE)
*   [包含清单属性](#manifest)
*   [使用签名的 JNLP 文件](#jnlp)
*   [签名和时间戳 JAR 文件](#signStamp)
*   [使用 HTTPS 协议](#https)
*   [避免本地 RIA](#local)

## 遵循安全编码指南

遵循 [Java 编程语言安全编码指南](http://www.oracle.com/technetwork/java/seccodeguide-139067.html)中的建议。第 4 节“可访问性和可扩展性”描述了如何限制类和包的可访问性，从而减少代码的漏洞。

JavaScript 代码被认为是不安全的，默认情况下仅限于安全沙箱。最大限度地减少 RIA 和 JavaScript 代码之间的交互。请小心使用 `AccessController.doPrivileged` 块，因为它允许从任何 HTML 页面或 JavaScript 代码进行访问。

## 使用最新版本的 JRE 进行测试

确保您的 RIA 运行在最新的安全版本的 JRE 上。 Java 平台支持 RIA 指定运行 RIA 所需的 Java 版本，但是，要求用户维护多个版本的 JRE，尤其是较旧的不安全版本，对用户来说是一个安全风险。

RIA 的一个好处是 RIA 的更新版本会自动下载到用户的系统。针对 JRE 的每次更新测试您的 RIA 并确保它正常工作。如果需要更改，请在服务器上更新 RIA，以便用户可以安装最新的 JRE 并仍然运行 RIA。

## 包括清单属性

将属性添加到描述 RIA 属性的 JAR 文件清单中。将 JNLP 文件或 `applet` 标记中的值与清单中的值进行比较，以验证是否运行了正确的代码。

当您的 RIA 不需要访问安全沙箱之外的访问权限时请求沙箱权限。 Java 沙箱为用户提供了额外的保护，如果用户不理解为什么它要求对系统进行不受限制的访问，则用户可能无法运行特权应用程序。

清单属性还可用于标识可从中访问 RIA 的位置。这包括 JavaScript 代码可以调用您的 RIA 的位置，以及可以启动 RIA 的 JNLP 文件或 applet 标记的位置。有关可用清单属性的信息，请参见[使用清单属性增强安全性](../jar/secman.html)。

## 使用签名的 JNLP 文件

如果您的 RIA 需要访问非安全系统属性或 JVM 参数，请使用签名的 JNLP。如果需要外部和内部 JNLP 文件之间的某些变体，请使用 JNLP 模板。有关信息，请参阅 Java 平台标准版部署指南中的[签名 JNLP 文件](https://docs.oracle.com/javase/8/docs/technotes/guides/deploy/signed_jnlp.html)。

要访问非安全系统属性或 JVM 参数，请在[设置受信任参数和安全属性](../doingMoreWithRIA/settingArgsProperties.html)中所述的 JNLP 文件中包含属性或参数。

## 签名和时间戳 JAR 文件

从受信任的证书颁发机构获取代码签名证书，并使用它为 RIA 签署 JAR 文件。仅向用户部署使用有效证书签名的 RIA。

签名 JAR 文件时，还要为签名添加时间戳。时间戳验证证书在 JAR 签名时是否有效，因此证书到期时不会自动阻止 RIA。有关签名和时间戳的信息，请参阅[签名 JAR 文件](../jar/signing.html)。

自签名和未签名的 RIA 被认为是不安全的，除非设置了允许特定应用程序的例外站点列表或部署规则集，否则不允许其运行。但是，自签名可用于测试目的。要使用自签名 RIA 进行测试，可以将自签名证书导入受信任的密钥库。

## 使用 HTTPS 协议

将 HTTPS 协议用于用户获取 RIA 的 Web 服务器。 HTTPS 协议由服务器加密和验证，使任何人都难以篡改您的 RIA。

## 避免本地 RIA

本地 RIA 不适用于生产。要确保用户运行您打算运行的代码，请在应用程序服务器上托管 RIA。

对于测试，建议使用 Web 服务器。另一个选项是将您的应用程序添加到例外站点列表，该列表在 Java 控制面板的“安全”选项卡中进行管理。