PHP:嵌入另一个 URL 的 URL 的较短/模糊编码?

2024-03-04

我正在为自己编写一个脚本,它基本上可以让我在单个 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(使用前将#替换为@)

PHP:嵌入另一个 URL 的 URL 的较短/模糊编码? 的相关文章

随机推荐

  • 递归 XSLT,第 2 部分

    好的 继续我的问题here https stackoverflow com questions 2907332 how can i write an xslt that will recursively include other file
  • 经常将 IRB 历史记录刷新到文件

    irb 可以将命令历史记录写入文件 但只有在 irb 会话结束时才会执行此操作 我想更频繁地写出我的命令历史记录 与每个命令 如 shell 历史记录 一样频繁 但不必如此频繁 是否有 irbrc 设置 或者我必须破解 irb 源 已经多次
  • 将鼠标悬停在图像上方的 Font Awesome 图标居中

    当鼠标悬停在图像上时 我试图将字体很棒的图标置于图像的中心 这是我的 HTML div class profile img container img src http s3 amazonaws com 37assets svn 765 d
  • 如何在 Xamarin Forms 中将 Android 日期选择器设置为微调器(而非日历)模式?

    在 Android 设备上的 Xamarin Forms 中选择日期选择器控件时 将显示日期选择器的日历模式视图 如何更改它以显示微调模式 我找到的唯一示例是更新我的 styles xml 这是我所拥有的 但不起作用
  • CSS 不同的链接样式

    据我所知 使用类似的东西 class a 与使用相同 class a link Right 另外 以下两种款式是一样的吗 class a focus class a hover 最后 下面的样式是鼠标按下时的颜色吧 class a acti
  • Zend Framework 2 - Hydrator 策略未响应且水合

    我基本上实现了这个策略 https github com zendframework zf2 pull 2072 主要区别是 我猜 我使用Doctrine2 调用构造函数类 打印测试回显 但两个函数extract and hydrate 不
  • LINQ:将 lambda 表达式作为参数传递以由方法执行和返回

    因此 场景如下 我有一系列不同的存储库类 每个类都可以使用独立的数据上下文或共享上下文 在使用隔离上下文的情况下 我想向基类添加一个方法 该方法允许我将 lambda 指定为参数 让该表达式由所选存储库的隔离上下文执行并返回 IQuerya
  • 如何设置 Bitmap.Width 和 Bitmap.height

    您好 我已经加载了位图 我需要设置自己的高度和宽度 bitmap height 100 但这个声明不允许我 因为它说 System Drawing Image Width cannot be assigned to it is read o
  • __del__() 如何干扰垃圾回收?

    I read class Account object def init self name balance self name name self balance balance self observers set def del se
  • 如何从 Jenkins 推送到 git?

    以下代码是 Jenkins 中的 执行 Shell 构建步骤 该作业从包含文件的存储库中提取ranger policies policies json 我想要做的是更新该文件 在本例中使用curl 命令 然后将更改提交到源代码管理并更新远程
  • Android模拟器中的相机

    我使用 android SDK 4 0 3 和 eclipse Indigo 我正在尝试开发一个使用相机的应用程序 当我拍照时 会出现以下消息 不幸的是 相机已经停止了 在 Eclipse 控制台中 模拟器 错误 camera client
  • 使用端口(例如 localhost:12345)访问 IPv6 可解析 URL 会导致 Strawberry Perl 5.30.1 中的错误地址

    在启用了 IPv6 的 Windows 10 下使用 Strawberry Perl 5 30 1 时 由于 Perl 的 DNS 解析器中似乎存在错误 因此无法正确解析带有端口号的 URL 对于以下测试 我们有一个简单的 Web 服务器
  • 测试类型是否是分配器的正确方法是什么?

    Writing allocator traits
  • 将可扩展性设计到应用程序中

    这句话是什么意思 将可扩展性设计到应用程序中 是否存在可以使应用程序更具可扩展性的设计模式 这个问题主要针对 Web 应用程序或基于 SOA 中间件的应用程序 当我想到 大规模应用程序 时 我想到了三个截然不同的事情 将在大型横向扩展集群
  • 使用 C# 计算每个句子中的单词数

    我需要创建一个程序来显示单词最多的句子 string st I like apples I like red apples I like red apples than green apples foreach string s in st
  • LINQ to SQL 与 ADO.Net

    LINQ to SQL 和 ADO net 之间有什么区别 ADO NET 是 NET Framework 的底层数据访问 API 很像 Java 中的 JDBC 它自 NET 第一个版本发布以来就已存在 LINQ to SQL 是一个基于
  • 连续 2d 切片上的 Numpy 向量化函数

    我有一个 3D numpy 数组 我想通过在沿轴的连续 2d 切片上执行函数并将生成的切片堆叠在一起来形成一个新的 3d 数组 显然有很多方法可以做到这一点 我想以最简洁的方式做到这一点 我认为这是可能的numpy vectorize 但这
  • 查找两个 C# 对象之间的属性差异

    我正在开发的项目需要在用户更改电子邮件 帐单地址等时进行一些简单的审核日志记录 我们正在使用的对象来自不同的来源 一个是 WCF 服务 另一个是 Web 服务 我已经使用反射实现了以下方法来查找两个不同对象上属性的更改 这会生成一个具有差异
  • 如何使用 Bower 作为包管理器获取 Less v.2.0.0 的 Rhino 版本

    我正在使用 less js 的 Rhino 版本 使用 Bower 将其提取到我的开发环境中 在 1 7 5 下 一切正常 bower 将获得所有不同的版本 Node 和 Rhino 版本都将存储在我的环境中 最近更新到 2 0 0 后 似
  • PHP:嵌入另一个 URL 的 URL 的较短/模糊编码?

    我正在为自己编写一个脚本 它基本上可以让我在单个 get 请求的查询字符串中发送一个 URL 和两个整数维度 我使用 base64 对其进行编码 但它太长了 我担心 URL 可能会变得太大 有谁知道另一种更短的方法吗 在 get 请求中收到