使用 CFID 和 CFTOKEN 时需要注意潜在的安全问题。这些问题可以通过简单地使用 J2EE 会话管理来解决。以下是ColdFusion 文档的摘录:
客户端标识符和安全性
以下客户端标识符问题可能具有安全隐患:
- 确保 CFToken 标识符的唯一性和复杂性
- 限制会话标识符的可用性
下一节将讨论这些问题。
确保 CFToken 的唯一性和安全性
默认情况下,ColdFusion 在 CFToken 标识符中使用八位随机数。在大多数情况下,这种 CFToken 格式为用户提供了唯一、安全的标识符。(在 ColdFusion 中,生成此数字的方法使用加密强度随机数生成器,该生成器仅在服务器启动时播种。)
但是,在 ColdFusion Administrator 中,您可以启用“设置”页面来生成更复杂的 CFToken 标识符。如果您启用将 UUID 用于 cftoken 选项,ColdFusion 通过将 16 位随机十六进制数字添加到 ColdFusion UUID 来创建 CFToken 值。生成的 CFToken 标识符类似于以下内容:
3ee6c307a7278c7b-5278BEA6-1030-C351-3E33390F2EAD02B9
提供会话安全
ColdFusion 对客户端范围和标准会话范围使用相同的客户端标识符。由于 CFToken 和 CFID 值用于在一段时间内识别客户端,因此它们通常保存为用户浏览器上的 cookie。这些 cookie 一直存在,直到客户端的浏览器删除它们,这可能是相当长的时间。因此,与 ColdFusion 为每个会话使用不同的用户标识符相比,黑客可以更多地访问这些变量。
拥有用户 CFToken 和 CFID cookie 的黑客可以通过在用户会话期间使用被盗的 CFToken 和 CFID cookie 访问网页来访问用户数据。虽然这种情况不太可能发生,但理论上是可能的。
您可以通过选择 ColdFusion 管理员内存变量页面上的使用 J2EE 会话变量选项来消除此漏洞。J2EE 会话管理机制为每个会话创建一个新的会话标识符,并且不使用 CFToken 或 CFID cookie 值。
与安全相关的更改
当您升级到 ColdFusion 9 升级 1 时,以下与安全相关的规范适用: