在ColdFusion中隐藏/加密URL变量

时间:2014-08-08 16:12:40

标签: coldfusion urlvariables

如果我有一个网站且网址为www.example.com/mainpage.cfm?id=0123&app=2,我该如何隐藏id=0123app=2,以便用户无法更改这些变量?

我正在查看由我之前的某个人撰写的复杂程序,他正在通过URL将这些变量从一个页面传递到另一个页面。我只是想快速修复,因为我不想重写整个程序。

5 个答案:

答案 0 :(得分:1)

以下是编码方式:

#URLEncodedFormat(Encrypt(id, "#key#"))#

id是变量,密钥可以是任何东西(用作编码和解码的证书)。

解码:

cfset url.id = #Decrypt(url.id, "#key#")#

同样,关键变量将与要编码的变量相同。

答案 1 :(得分:0)

如何使用hashids库。 http://www.hashids.org/coldfusion/

除ColdFusion外,该库还提供JavaScript,Ruby,Python,Java,PHP,Perl,CoffeeScript,Objective-C,C ++,Go,Lua,Elixir,Node.js和.NET。这使得它非常易于与其他语言一起使用,甚至可以在客户端动态生成ID。

<cfscript>
hashids = new Hashids(salt="this is my salt"
    ,minLen=8
    ,alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");

id_to_hash = listtoArray("1");   // try "1,2,3" and "3,2,1" and "1,1,1"
writeoutput('original = #arrayToList(id_to_hash)#<br>');

hashed_id = hashids.encrypt(id_to_hash);
writeoutput('hash = #hashed_id#<br>');

unhashed_id = arraytolist(hashids.decrypt(hashed_id));
writeoutput('unhashed = #unhashed_id#<br>');
</cfscript>

答案 2 :(得分:0)

人们更改ID有什么问题?

当然,他们可能会发现自己存在于不存在的页面上,并且您需要执行一些cfif通用捕获来防止错误,无论您的页面是作为与数字相关联的文件存储还是作为数据库中的文件存储。

你可以为那些本来是荒谬的页面制作密钥,就像一个简单的数字腌制的直接哈希(比如哈希(&#34; 1blueplug&#34;)变成a79ea61e3b69d54a008772bcaf0fb398。将哈希存储在数据库中或作为文件名存储或者其他什么。由于他们不知道你的盐(这里是蓝色插头),他们没有真正的方法可以找到他们不应该的页面。

我的用户不会更改我网站上的参数并破坏他们自己的体验,我不会感到困扰。页面应该进行必要的检查,以确保表单真正提交。

除此之外,他们能够访问什么类型的网页,而不是破坏自己的体验?如果他们访问的网页存在某种安全问题(管理员或其他用户的网页),则需要考虑新的应用程序。

答案 3 :(得分:0)

这是一种快速而又肮脏的方法,我很久以前就知道了,但是描述它的原始网页已被删除。因此,从内存中看,它是关于同一件事的:

    <cfset email = "test@myemail.com">
    <cfset algorithmkey = "typeanythingdoesnotmatter123">
    <cfoutput>#email#</cfoutput><br>
    <cfset test = #encrypt(email, algorithmkey, "CFMX_COMPAT", "HEX")#>
    <cfoutput>#test#</cfoutput><br>
    <cfset emailagain = #decrypt(test, algorithmkey, "CFMX_COMPAT", "HEX")#>
    <cfoutput>#emailagain#</cfoutput><br>

如果将以上内容保存到CFM模板中,则会得到以下输出:

test@myemail.com

650CEDC7328BA59A21980793329A73F6

test@myemail.com

除非试图破解该值的人知道您的algorithmkey =“ typeanythingdoesnotmatter123”,否则将很难解密该值,因此 取而代之的是任何可以在这里钓鱼的地方 ID或其他帐户中的内容。

答案 4 :(得分:-1)

我认为我找到了更好的解决方案。

使用(CGI.SERVER_NAME,CGI.HTTP_REFERER,1)让我知道网址中的任何内容是否已更改。 我可以按如下方式申请:

<cfif FindNoCase(CGI.SERVER_NAME, CGI.HTTP_REFERER, 1) eq 0> 
<cfabort> 
<cfelse> enter code here... 
</cfif>