1

我的表格看起来像这样:

 <form name="foo_contact" action="<CFOUTPUT>#URLSessionFormat("index.cfm?foo=bar")#</CFOUTPUT>">

当我禁用 cookie 并提交表单时,我的 URL 如下所示: index.cfm?foo=bar?CFID=12345&CFTOKEN=12312312这不是我所期望的。它应该读index.cfm?foo=bar&CFID=12345&CFTOKEN=12312312

我在这里做错了吗?我是否需要自己编写一个函数来修复它,或者我错过了一个简单的解决方案?

4

3 回答 3

2

简单选项 - 改用隐藏形式 var。

<form name="foo_contact" action="<CFOUTPUT>#URLSessionFormat("index.cfm")#</CFOUTPUT>">
    <input type="hidden" name="foo" value="bar" />


替代选项 - 之后将相关更改?&

<cfset ActionUrl = URLSessionFormat("index.cfm?foo=bar")
    .replaceFirst('(?<!^index\.cfm)\?','&') />

<form name="foo_contact" action="<cfoutput>#ActionUrl#</cfoutput>">

.replaceFirst使用带有负后向((?<!..)部分)的正则表达式来查找第一个?不在前面的index.cfm并替换它。

于 2012-09-11T12:20:44.603 回答
0

你应该这样写:

#URLSessionFormat("index.cfm")#&foo=bar
于 2012-09-11T12:04:53.387 回答
0

使用 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 时,以下与安全相关的规范适用:

  • CFID、CFTOKEN 和 jsessionid 标记为 httpOnly。这减少了会话信息在跨站点脚本 (XSS) 攻击中受损的机会。
  • 将会话 cookie 的以下系统属性设置为 httpOnly:Dcoldfusion.sessioncookie.httponly=true
  • 会话 cookie 是否支持 httpOnly 取决于您使用的应用程序服务器:

    • 对于 Tomcat/JBoss,JSESSIONID 不支持 httpOnly
    • 在 JRun 上,在 jvm.config 文件中添加系统属性 Dcoldfusion.sessioncookie.httponly=true
    • 对于其他应用程序服务器,有关 httpOnly 对会话 cookie 的支持的详细信息,请参阅相关文档。
于 2012-09-11T13:01:58.670 回答