想到一个自增 id 但是同时防止遍历的办法

2015-11-12 10:56:13 +08:00
 est
比如会员, uid 从 1 开始,那么一些人就可以从 1 开始爬虫。。。

于是我在脑洞一些办法防止这个事。有的用uuid,甚至hash,感觉都不是很友好。在保持id自增的前提下,我想了一些办法:

第一个手段当然是限频率和屏蔽手段。。。

第二个手段,就是把自增 id 弄成稀疏的。 比如统统跳过 id 个位数为 7 的。。那么如果有人故意访问 uid=7, uid=17, uid=27 等等,就直接判定为爬虫,封锁之。

当然,判断个位数,这个很容易被发现规律猜到。

那么,有没有比较好的算法,让人猜不到这个 “间隙” id 的规律,但是服务器又非常容易判断为不可用 id 呢?
15574 次点击
所在节点    奇思妙想
85 条回复
est
2015-11-12 13:40:32 +08:00
@ts 网址我都背熟了。 newsmth.net/mainpage.html 纯手打。
wingoo
2015-11-12 13:41:51 +08:00
base62
映射规则自己指定下
hooopo
2015-11-12 13:45:21 +08:00
内部设置一个私有函数产生黑洞 ID...
ooh
2015-11-12 13:47:50 +08:00
没有任何实际意义
windows98
2015-11-12 13:58:15 +08:00
看帖子的同时,瞟了一眼这个帖子的 url...
ibireme
2015-11-12 14:02:16 +08:00
用 MongoDB 的 ID 生成办法就不错啊~
est
2015-11-12 14:10:01 +08:00
@hooopo 就是这个意思。。。那么,大家有没有什么好的私有函数建议呢。要无状态,速度快,很难逆向出的。。。这个帖子 /t/233004 被 @binux 弄一个一元四次方程就给破了。。。。。。。。。。
dong3580
2015-11-12 14:40:21 +08:00
@est
没用,我不信你作出站无目录列表,

@XiaoxiaoPu
这样变化的 id ,你让搜索引擎怎么收录?
est
2015-11-12 15:06:10 +08:00
@dong3580 没看懂。什么没用?
Felldeadbird
2015-11-12 15:23:40 +08:00
如果是闭源的话,直接 参数+自增 ID+参数。 混淆进去就行了。
如: order_id =1 ;那么访问的 URL 地址为:
/xxx.io?order=6544678198786782 拆分为三部分: 6544678 、 1 、 98786782 。
fork3rt
2015-11-12 15:58:22 +08:00
好无聊的方法。。。
zdhxiong
2015-11-12 16:03:33 +08:00
@est 不管你的网址弄得多复杂,一个 wget 命令都能把你的整个站镜像下来。
xierch
2015-11-12 16:10:06 +08:00
next_id = hmac(last_id, key) % MAX_GAP + 1
xierch
2015-11-12 16:10:46 +08:00
哦,不是 =,是 +=
xierch
2015-11-12 16:11:44 +08:00
next_id = last_id + 1 + hmac(last_id, key) % MAX_GAP
est
2015-11-12 16:25:05 +08:00
@zdhxiong 你再想想呢?比如我 margin-left: -10000px 一个 div 里弄一个陷阱链接,你访问就直接给你永久返回垃圾数据。镜像下来然后呢?
huobazi
2015-11-12 16:27:56 +08:00
snowflake
est
2015-11-12 16:31:50 +08:00
iambic
2015-11-12 16:32:44 +08:00
感觉是不是就是一个 integer hashing 问题啊

这个链接 https://gist.github.com/badboy/6267743 应该有用。另外 redis 源码里, dict.c 用的 Thomas Wang 的 hashing function 应该也可以参考下
clino
2015-11-12 16:34:11 +08:00
取当前时间

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/235554

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX