mindplay / payload
使用文件名和URL安全字符编码和解码小型数据负载
1.0.0
2017-02-03 11:48 UTC
Requires
- php: >=7
Requires (Dev)
- mindplay/readable: ^1.1
- mindplay/testies: ^0.3.0
This package is auto-updated.
Last update: 2024-08-25 19:57:37 UTC
README
这个库允许您将小型数据负载编码和解码为可以在文件名和URL中安全使用的字符串。
这对于将调整大小/裁剪信息编码到图像URL、创建用于共享内容的个性化URL等情况非常有用。
生成的字符串包含一个小型校验和作为完整性检查仅此而已 - 不要依赖于“隐蔽性安全”,数据负载可以被解码,并且根据定义在任何方式上都不是安全或私密的。
话虽如此,有一个选项可以防止暴力攻击,例如使用更长的校验和和私盐 - 详见下方的选项。
使用方法
该服务本身没有依赖关系
$service = new PayloadService();
将数组编码为字符串
$string = $service->encode(["hello" => "world"]); // "cMIDaGVsbG89d29ybGQ"
将字符串解码回数组
$data = $service->decode("cMIDaGVsbG89d29ybGQ") // ["hello" => "world"]
选项
构造函数允许您可选地强制执行最大编码长度 - 此选项默认禁用。如果启用,当编码字符串长度超过定义的最大值时,encode()
将抛出异常。
您可以选择指定要附加到校验和的字符数 - 默认设置为 4
。如果您不关心URL的完整性,可以将此设置为零。
如果您担心对URL进行暴力攻击,可以增加校验和的大小,并可选地指定私盐以初始化校验和 - 再次强调,这并不提供强大的安全性,但足以防止例如针对图像URL的暴力攻击。
有关选项的在线文档,请参阅源代码。
限制
只能编码字符串和数组。如果您的数据包含整数,这些整数将被转换为字符串,并且在解码时以字符串格式到达。
一些建议
如果可能,避免编码诸如文件名之类的字符串 - 因为数据以base64格式编码,这会增加大小,因此一个好的文件名策略可能是(例如)将编码字符串作为文件名的前缀或后缀。