资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

  • A+
所属分类:python基础入门

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

hashids需要提供一个salt值,相当于编解码的私钥,别人不知道你的私钥,就无法编码出对应的帖子的展现key,也无法通过url上的展现key解码出对应的帖子id。所以想直接遍历你的帖子服务那就做不到了。

现在我们试试随便提供字符串,对它进行解码会怎样

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

我们看到这些字符串都是非法,所以hashids无法解码出对应的整数。

下面我们对一段连续整数进行编码

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

可以发现编码之后的值在直觉上是没有任何规律可言的。

鉴于hashids是如此的小巧,笔者随后对它的源代码进行了一番研究。首先看看它的构造器

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

注意火星文的字典必须是unicode类型。不然你编码得到的不是火星文,而是乱码。具体实现算法我就跳过了,有点复杂,我就不讲了。

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

然后它还支持对16进制字符串进行编解码,看来mongodb的id也可以纳入进来了。

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

最后你可千万别把秘钥搞丢了,一旦搞丢了,就意味着所有帖子的展现id需要重新计算一边,变的跟以前不一样了,搜索引擎收录的所有网页就失效了,别人外链过来的地址全都打不开,这无疑会给你的网站带来很大的损失。

资深程序员介绍的一款用于搞乱数据库ID的开源Python库!

weinxin
我的微信公众号
爱真理,得永生!          爱在灵灵久博客,网罗天下,福利大家!

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: