2012-06-17 46 views
0

我正在使用ColdFusion進行加密和解密。我具有可變的活性用一個值1。我想創建含有活性等的加密值的URL:如何解密包含特殊ColdFusion字符的值?

http://localhost:8500/blueline/[email protected]&active=!# 

這裏!#是1.

加密值在另一端即ActivateRegistration。 cfm我需要用相同的私鑰解密active並找到原始值。但我沒有得到正確的加密字符串時,我嘗試下面的代碼:

<cfset activeValue = url.active> 

原因是加密值還包含字符串中的特殊字符#。誰能幫忙?另外我該如何處理ColdFusion特殊字符/關鍵字?

+1

您使用哪種算法和編碼?不知道更多,我會建議返回base64中的加密值。另外,一定要[url encode](http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7c2f.html)url參數。如果這沒有幫助,你能發表一個重現問題的例子嗎? – Leigh

回答

5

其他人已經介紹瞭如何轉義URL值中出現的有意義的字符,但最後還有一個難題是澄清/修正。

你對加密字符串沒有問題,因爲#是ColdFusion的特殊字符,這是因爲它在URL本身具有特殊含義。在URL中,#是服務器上文檔的地址與文檔中定位的特定片段(即書籤/定位標籤)之間的分隔符。由於這些信息被認爲與服務器無關,所以瀏覽器永遠不會發送它,所以服務器永遠不會得到它。

它類似於如果你有一個參數值本身有一個嵌入&符號(&):就URL而言,這是參數之間的分隔符,而不是參數值的一部分,所以CF不會看到它是一個URL變量值的一部分,它會將其視爲兩個變量之間的分隔符。

爲了避免所有這些混淆,正如其他受訪者說的那樣,您需要始終對包含meaningful to the URL-addressing schema itself的字符的URL進行URL編碼。

+0

@sam這就是答案! – baynezy

+0

Duh,我很受網址編碼的困擾,我沒有解釋爲什麼。很好的解釋。這是正確的答案+1。 – Leigh

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所說,我想看看您是如何生成此加密文本以更好地幫助您的。

+0

我認爲我們需要更多的信息。因爲他們不應該在'encrypt'的動態結果中逃避英鎊符號。只有當它們被硬編碼到.cfm頁面時。另外,'URL'變量被自動解碼。所以你可以跳過'urlDecode'。 – Leigh