模糊URL参数以防止用户更改它们?

时间:2013-03-12 13:45:02

标签: javascript md5 url-parameters

我正在开发一个基于Javascript的胖客户端页面,允许用户使用其他Web客户端应用程序(Oracle Siebel)执行任务。

从浏览器调用网页的方式是通过一个简单的window.open()调用。

当发生这种情况时,将传递一个URL,该URL在末尾包含一些参数,这些参数将根据它们具有的值来改变胖客户端页面的功能。

例如

  

userlevel = 1 //普通用户

     

userlevel = 2 //高级用户

在一个示例中,完整的URL就像这样

  

www.mypage.com/index.htm?id=25215125%userlevel=2%context=full

但是,想要更改访问权限的用户只需要知道如果他们更改了用户级别,那么他们就可以在这个胖客户端页面上更改他们的访问权限。

是的,我知道这是有风险的,在你问我为什么不使用服务器支持的瘦客户端时,控件无法被用户更改。我只需要这样做!

此系统将处于“受信任”的环境中,此用户将拥有最佳的平均IT技能。

所以我需要做的就是找出一种方法来混淆/加扰URL参数(如果可能的话),然后在胖客户端解密它们。

e.g。

  

www.mypage.com/index.htm?1sdf908ga90-821098650f8asdg098g0a98

我在浏览器上进行了测试,到目前为止没有任何投诉,所以我想我只需要开发一段逻辑来解读它。

e.g。我可以用MD5吗?

任何示例或想法?

由于

2 个答案:

答案 0 :(得分:1)

尝试Base64编码。 https://stackoverflow.com/a/4699739/1088652

这会缩短它并使其模糊,以便用户不能只在URL中抛出值。

答案 1 :(得分:0)

HMAC可确保参数完整性。您使用密钥和所有参数生成哈希,您在URL中包含此哈希,然后在服务器端使用相同的参数生成哈希并比较值。

function generateSignature(array $params, $hmacKey)
{
    // sort the array by key using SORT_STRING order
    ksort($params, SORT_STRING);

    $escapeFunc = function ($val) {
        return str_replace(':', '\\:', str_replace('\\', '\\\\', $val));
    };

    // generate the signing data string
    $signData = implode(':', array_map($escapeFunc, array_merge(array_keys($params), array_values($params))));

    // base64-encode the binary result of the HMAC computation
    $merchantSig = base64_encode(hash_hmac('sha256', $signData, pack("H*", $hmacKey), true));

    return $merchantSig;
}