我正在开发一个基于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吗?
任何示例或想法?
由于
答案 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;
}