如何解密包含特殊ColdFusion字符的值?

时间:2012-06-17 06:30:37

标签: coldfusion coldfusion-8

我正在使用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特殊字符/关键字?

2 个答案:

答案 0 :(得分:5)

其他人已经介绍了如何逃避URL值中出现的URL有意义的字符,但是最后一个难题是澄清/纠正。

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

它类似于你有一个参数值,它本身有一个嵌入的&符号(&amp;):就URL而言,这是参数之间的分隔符,而不是参数值的一部分,所以CF不会看到作为URL变量值的一部分,它将它视为两个变量之间的分隔符。

为避免所有这些混淆,正如其他受访者所说,您需要始终对需要在包含meaningful to the URL-addressing schema itself字符的网址上进行网址编码。

答案 1 :(得分: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解码它们也应该是好的。
  3. 正如Leigh所说,我想看看你如何生成这个加密文本以更好地帮助你。