2020-07-21 18:55:00
围观(3902)
在项目开发中, 很多时候会写一些 API 接口, 例如接口会返回这样的数据:
[ { "id": "1", "content": "content" }, { "id": "2", "content": "content" } ]
在安全方面考虑, 这样会暴露了主键 ID, 对方可以轻易的知道目前的数据量以及被爬数据会变得很简单.
就如本文的 URL, 主键 ID 是 199 , 如果想要爬整个站点的文章, 直接从 1 开始循环去访问就行了...
所以有这么一个包: hashids https://github.com/vinkla/hashids
可以直接使用 Composer 安装这个包.
博主用 Laravel 安装这个包尝试了一下, 根据文档直接使用:
$hash_ids = new Hashids(); dd($hash_ids->encode(1)); // 输出 jR
仔细看官方文档, 如果仅仅这样使用, 每个 1 都是会输出 jR, 如果爬站的人知道使用了这个包就也能知道实际的主键 ID, 所以需要加盐.
这个包加盐很方便, 他的构造方法已经获取了盐.
也就是说, 只需要这样实例化对象就可以加盐:
$hash_ids = new Hashids('salt,bubaijun.com'); dd($hash_ids->encode(1));
此时输出的结果是 Ry, 即使爬站的人知道用了这个包, 也无法得知解密后的数据.
解码的方法:
$hash_ids = new Hashids('salt,bubaijun.com'); $id = $hash_ids->encode(1); dump($id); dd($hash_ids->decode($id));
依次输出为:
"Ry" array:1 [▼ 0 => 1 ]
所以要拿到这个解密后的 ID, 需要加上 0 索引.
$hash_ids = new Hashids('salt,bubaijun.com'); $id = $hash_ids->encode(1); dump($id); dd($hash_ids->decode($id)[0]);
则会依次输出为:
"Ry" 1
本文地址 : bubaijun.com/page.php?id=199
版权声明 : 未经允许禁止转载!
上一篇文章: Laravel自定义错误及全局事务
下一篇文章: 博客被反代了 真的太难了