这两天做了一个需求,需要把一些静态资源的内网链接转换成一个外网有时效限制的公网链接。
过程中使用了公司内部的一个转换工具包,修改了静态资源的域名,并在 url 后面带上了 x-expire
过期时间和 x-signature
签名两个参数,比如
// 转换前
http://os-111.net/111.mp3
// 转换后
http://xxx.com/111.mp3?x-expire=1222222&x-signature=JIHIdffoIHFf
x-expire 参数的作用比较好理解,就是超过有效期后就不能访问了
但是 x-signature 参数的作用就不太理解,刚开始以为是标识用户身份,限制只能某个用户访问,但是经过验证,发现这个链接在有效期内每个人都能访问。后来问了一下组内大佬,大佬说签名是用来防止 uri 和 过期时间被用户篡改,导致用户可以访问其他资源或者永久访问资源。
所以 x-signature 签名实际上是一个 {url}?{x-expire=xx} 的加密hash,防止url 某字符被篡改。亲测修改 url 或者过期时间的任意字符,公网链接就不能被访问了。
过程中想问了下 chatgpt4,本来以为这种小问题对于 gpt4 应该是小菜一碟,但是从实际解答结果来看,好像对于 x-signature 的解释不是很正确。