【问题标题】:How to decrypt a value which contains special ColdFusion characters?如何解密包含特殊 ColdFusion 字符的值?
【发布时间】:2012-06-17 06:30:37
【问题描述】:

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

【问题讨论】:

  • 您使用的是哪种算法和编码?在不了解更多信息的情况下,我建议以 base64 格式返回加密值。另外,一定要url encode url 参数。如果这没有帮助,您能否发布一个重现问题的示例?

标签: coldfusion coldfusion-8


【解决方案1】:

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

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

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

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

【讨论】:

  • 呃,我被 url 编码迷住了,我懒得解释原因。很好的解释。这是正确的答案+1。
【解决方案2】:
<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 所说,我想看看您如何生成此加密文本以更好地帮助您。

【讨论】:

  • 我认为我们需要更多信息。因为他们不应该在encrypt 的动态结果中转义磅符号。仅当它们被硬编码到 .cfm 页面中时。此外,URL 变量会自动解码。所以你可以跳过urlDecode
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 2018-06-28
  • 1970-01-01
  • 2020-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多