3

我正在开发一个基于 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 参数(如果可能的话),然后在胖客户端上解密它们。

例如

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

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

例如,我可以使用 MD5 吗?

有什么例子或想法吗?

谢谢

4

2 回答 2

2

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

这将缩短它并混淆它,这样用户就不能只在 URL 中抛出值。

于 2013-03-12T14:03:15.173 回答
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;
}
于 2016-02-14T16:09:18.010 回答