0

我正在使用 ColdFusion 进行加密和解密。我有一个值为 1 的变量 active。我想创建一个包含 active 加密值的 URL,例如:

http://localhost:8500/blueline/ActivateRegistration.cfm?email=abc@gmail.com&active=!#

!#是 1 的加密值。

在另一端,即 ActivateRegistration.cfm 我需要active使用相同的私钥解密并找到原始值。但是当我尝试以下代码时,我没有得到正确的加密字符串:

<cfset activeValue = url.active>

原因是加密值还包含字符串中的特殊字符#。任何人都可以帮忙吗?另外如何处理 ColdFusion 特殊字符/关键字?

4

2 回答 2

5

其他人已经介绍了如何转义出现在 URL 值中的对 URL 有意义的字符,但还有一个难题需要澄清/更正。

加密字符串没有问题,因为 # 是ColdFusion的特殊字符,这是因为它在 URL 本身中具有特殊含义。在 URL 中,# 是服务器上文档地址与文档中目标特定片段(即:书签/锚标记)之间的分隔符。由于此信息被认为与服务器无关,因此浏览器从不发送它,因此服务器永远不会得到它。

这类似于如果你有一个参数值,它本身有一个嵌入的 & 符号:就 URL 而言,这是参数之间的分隔符,而不是参数值的一部分,因此 CF 不会将其视为值的一部分对于 URL 变量,它会将其视为两个变量之间的分隔符。

为了避免所有这些混淆,正如其他受访者所说,您需要始终对需要在包含对 URL 寻址模式本身有意义的字符的 URL 上进行的值进行 URL 编码。

于 2012-06-17T09:30:22.153 回答
0
<cfparam name="url.active" default="">
<cfoutput>
    <a href="#cgi.script_name#?active=#urlEncodedFormat('!##')#">This String Contains CFML Values</a>
    #urlDecode(url.active)#
</cfoutput>

你需要做几件事。

  1. 您需要替换任何#字符以##将它们转义以用于 ColdFusion。
  2. 如果您在 URL 中传输奇怪的字符,使用 urlEncodedFormat() 传输它们并使用 urlDecode() 或 base64 解码它们应该也是最安全的。

正如 Leigh 提到的,我想看看您如何生成此加密文本以更好地帮助您。

于 2012-06-17T08:03:39.933 回答