服务器端 - 为了防止数据库条目 ID 直接暴露给用户,该如何设计?

查看:829
本文介绍了服务器端 - 为了防止数据库条目 ID 直接暴露给用户,该如何设计?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

在数据库通过 id 获取相应的条目

select * from obj_table where id = 101;

例如在 web 段,用户会通过 url: "abc.com/p/101" 来获取相应的信息。

这样处理的话有个弊端,爬虫可以很方便的顺着 id 自增的规律来抓取信息,有些时候不想暴露这样的信息。那么后段该如何处理?

例如 segmentfault.com 问题 url 是这样的"https://segmentfault.com/q/1010000007930814"

后面的"1010000007930814"显然不是数据库中相应条目的 id,那么他们之间的转换关系是什么样的?

相关讨论:想到一个自增 id 但是同时防止遍历的办法

解决方案

可以使用hashids

将数值转化为唯一的且尽可能短 id(注意只是用来转化数值),且有各种语言版本的实现,方便使用。

from hashids import Hashids
hashids = Hashids(salt="this is my salt")
id = hashids.encode(11, 22, 33)  # 'KbiyCL'
numbers = hashids.decode(id)  # (11, 22, 33)

这篇关于服务器端 - 为了防止数据库条目 ID 直接暴露给用户,该如何设计?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆