0

暗号化と復号化にColdFusionを使用しています。値1のアクティブな変数があります。次のように、アクティブの暗号化された値を含む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変数の場合、2つの変数間の区切り文字と見なされます。

他の回答者が言ったように、このすべての混乱を避けるために、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でデコードするのが最も安全です。

リーが述べたように、私はあなたがあなたをより良く助けるためにこの暗号化されたテキストをどのように生成しているかを見たいと思います。

于 2012-06-17T08:03:39.933 に答える