检查其中包含加号的 URL 的行为更改

此规则将标记满足以下条件的 URL:包含加号(“+”),但是此加号不在 URL 的查询参数部分中。 在 Java 代码中,此规则会扫描以查找 java.net.URL 构造函数并且检查用来创建此 URL 的参数。 此规则会查找位于 URL 中但不在查询参数中的加号。 查询参数包含 "?" 右边的所有内容 URL 中的字符。

在 WebSphere Application Server V5.1 之前,如果对 URL 进行解码,那么会对整个 URL 进行解码,而不只是对查询参数进行解码。 此行为不正确。已对 Web 容器进行更改,以使加号不在查询参数中时,Web 容器不会将其视作特殊字符。 这会导致应用程序回归,而且在 V5.1.1.11 中,添加了 Web 容器定制属性,以允许您控制对加号进行解码的行为。 此定制属性的缺省行为是旧行为,即,对位于 URL 中任何位置的加号进行解码。

如果 URL 中包含不应对其进行解码的加号,那么必须将 Web 容器定制属性 com.ibm.ws.webcontainer.decodeURLPlusSign 设置为 false。 缺省行为是 true。

此 Java 规则将检测 URL 构造函数,如果有可能,还要检查构造函数的规范、主机和文件参数,以验证是否没有加号。 此规则会扫描构造函数,这些构造函数将传递已在同一编译单元中定义的字符串字面值或终态字符串变量。 如果它可以检查规范、主机或文件参数,那么它将仅标记那些违反了此规则的构造函数。

此 Java 规则还将标记满足以下条件的 URL 构造函数实例:这些构造函数将规范、主机或文件名编码为无法检查的变量。

示例 1:


import java.net.URL;

URL url = new URL("http://www.domain.com?id=test&name=plus+sign");
}

在示例 1 中,此规则将不会标记该 URL 构造函数,因为加号位于查询参数中。

示例 2:


import java.net.URL;

URL url = new URL("http://www.domain.com/plus+path?id=test&name=ok");
}

在示例 2 中,此规则会标记 URL 构造函数,因为此 URL 的路径部分中有一个加号。

有关其他信息,请参阅 java.net.URL Java 文档。