数据库 mysql
目前数据库有个自增的数字 id, 但容易被遍历,
出于防止被对手看出动向 等原因
打算在前台输出 userid 和文章 id 的时候, 进行加密
目前打算 保留系统自带的 数字 id, 再额外增加一个 shortuuid 生成的字段,展现给前台用户
https://github.com/skorokithakis/shortuuid
大家觉得这个方案如何?
有没有更好的方案
比较追求性能、扩展性、安全性、性价比
1
crysislinux 2018-02-17 19:16:38 +08:00 1
可以只用 slug,禁止 id 直接访问。
|
2
night98 2018-02-17 19:19:22 +08:00 via Android 1
文章 id+uuid 的 sha1 值也可以,同时保存在数据库即可。
|
3
MiffyLiye 2018-02-17 19:23:14 +08:00 1
无序的 uuid 对数据库索引不友好,可以试试趋势有序的 snowflake
https://github.com/MiffyLiye/Snowflake |
4
find456789 OP |
5
find456789 OP |
6
geelaw 2018-02-17 20:07:51 +08:00 1
阻止遍历的最简单想法是这样做:使用自增的 id,并在 URL 上附加一个对该 id 的数字签名。
|
7
MiffyLiye 2018-02-17 20:12:52 +08:00 1
@find456789 可以分布式使用,我已经用上了其实。有其他问题,但是大部分问题在低频率创建(<4096 requests per 100 ms )时不太会遇到。
https://bitbucket.org/MiffyLiye/miffy/src 以上 repo 公开 24 小时 |
8
tscat 2018-02-17 20:44:46 +08:00 via Android 1
可以做蜜罐吧。部分 id 不对外公开,一旦访问直接 ban ip。
|
9
lyc9308 2018-02-17 20:46:41 +08:00 via Android 1
对 id 做一下编码成本也很低啊
|
10
ryd994 2018-02-17 22:38:06 +08:00 via Android 1
|
11
msg7086 2018-02-18 03:10:02 +08:00 1
|
12
imzoke 2018-02-18 04:08:03 +08:00 via Android 3
使用 hashids 吧
http://hashids.org |
13
honeycomb 2018-02-18 18:52:20 +08:00 via Android 1
@find456789
snowflake,或者你按照它的原理写个变形。 如果是 hibernate/jpa,直接把它作为 generator 就可以。 不过 snowflake 这种 ID 生成方式会携带明确且准确的时间戳,不一定适用。 |