mindplay/payload

使用文件名和URL安全字符编码和解码小型数据负载

1.0.0 2017-02-03 11:48 UTC

This package is auto-updated.

Last update: 2024-08-25 19:57:37 UTC


README

这个库允许您将小型数据负载编码和解码为可以在文件名和URL中安全使用的字符串。

PHP Version Build Status

这对于将调整大小/裁剪信息编码到图像URL、创建用于共享内容的个性化URL等情况非常有用。

生成的字符串包含一个小型校验和作为完整性检查仅此而已 - 不要依赖于“隐蔽性安全”,数据负载可以被解码,并且根据定义在任何方式上都不是安全或私密的。

话虽如此,有一个选项可以防止暴力攻击,例如使用更长的校验和和私盐 - 详见下方的选项

使用方法

该服务本身没有依赖关系

$service = new PayloadService();

将数组编码为字符串

$string = $service->encode(["hello" => "world"]); // "cMIDaGVsbG89d29ybGQ"

将字符串解码回数组

$data = $service->decode("cMIDaGVsbG89d29ybGQ") // ["hello" => "world"]

选项

构造函数允许您可选地强制执行最大编码长度 - 此选项默认禁用。如果启用,当编码字符串长度超过定义的最大值时,encode() 将抛出异常。

您可以选择指定要附加到校验和的字符数 - 默认设置为 4。如果您不关心URL的完整性,可以将此设置为零。

如果您担心对URL进行暴力攻击,可以增加校验和的大小,并可选地指定私盐以初始化校验和 - 再次强调,这并不提供强大的安全性,但足以防止例如针对图像URL的暴力攻击。

有关选项的在线文档,请参阅源代码

限制

只能编码字符串和数组。如果您的数据包含整数,这些整数将被转换为字符串,并且在解码时以字符串格式到达。

一些建议

如果可能,避免编码诸如文件名之类的字符串 - 因为数据以base64格式编码,这会增加大小,因此一个好的文件名策略可能是(例如)将编码字符串作为文件名的前缀或后缀。