我正在为自己编写一个脚本,它基本上可以让我在单个 get 请求的查询字符串中发送一个 URL 和两个整数维度。我使用 base64 对其进行编码,但它太长了,我担心 URL 可能会变得太大。
有谁知道另一种更短的方法吗?在 get 请求中收到时,它需要可解码,因此 md5/sha1 是不可能的。
谢谢你的时间。
Edit:抱歉 - 我应该更好地解释:好的,在我们的网站上,我们显示发布供审核的网站的屏幕截图。我们有自己的缩略图/屏幕截图服务器。我基本上会让图像标签包含一个编码字符串,该字符串存储要截取屏幕截图的 URL 以及要显示的图像的宽度/高度。然而,我不希望它以“原始文本”的形式让全世界看到。显然,base64 可以由任何人决定,但我们不希望普通人选择 URL 路径。实际上,我需要在单个 GET 请求中获取:url、宽度、高度。
由于您仅使用 base64 来混淆字符串,因此您可以使用其他内容来混淆它,例如 rot13 (或您自己的简单字母替换函数)。所以,urlencode(str_rot13($str))
编码和str_rot13(urldecode($str))
解码。
或者,要获得较短的 Base64 编码字符串,您可以在进行 Base64 编码之前压缩该字符串:base64_encode(gzencode($str, 9))
and gzdecode(base64_decode($str))
解码。
或者,如果这主要是一个安全问题(您不介意人们看到 URL,您只是想防止人们对其进行黑客攻击),您可以使用普通的查询字符串变量传递这些参数,但附加一个哈希值以防止篡改。 IE。:
function getHash($url, $width, $height) {
$secret = 'abcdefghijklmnopqrstuvwxyz whatever you want etc.';
return sha1($url . $width . $height . $secret);
}
// So use this hash to to construct your URL querystring:
$hash = getHash($url, $width, $height);
$urlQuerystring = '?url='.urlencode($url).'&width='.(int) $width.
'&height='.(int) $height.'&hash='.$hash;
// Then in your code that processes the URL, check the hash first
if ($hash != getHash($url, $width, $height))
// URL is invalid
(题外话:人们说你应该使用 POST 而不是 GET。如果所有这些 URL 所做的都是从数据库中获取屏幕截图来显示(即搜索查找),那么 GET 就很好而且是正确的。但如果调用这些 URL 实际上是执行一个操作,例如转到另一个站点,制作并存储屏幕截图,那么这就是 POST。顾名思义,GET 用于检索;POST 用于提交数据。如果您要在制作屏幕截图等昂贵的操作上使用 GET ,当 Google 等对这些 URL 建立索引时,您最终可能会拒绝访问您自己的网站。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)