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