把主键暴露在URL中是好的选择吗?


Django 为每个表自动生成了id字段,但这个问题跟Django联系不大。

假设有一个 Article表 ,包含 主键 ,那么我在url访问时直接使用该表的主键 id ,从安全性和 性能 方面考虑,这样好吗?比如说,Article表中有一条记录, id 10051 ,而网址 http://example.com/article/10051 来显示该文章。

这样做能方便用户访问,因为知道某个文章的id,可以猜测其他文章的id来访问不同文章,但是直接把主键暴露在url中,会不会让黑客很容易能猜到数据库的结构从而引起 安全方面 的问题。

这样的应用场景,有没有什么要注意的或者一般方案呢?

数据库 python django mysql 数据库安全

牧羊少年X 10 years, 11 months ago

如果是公开的问题不大的。但是如果是涉及权限,例如 id A不能被用户x 看到,那么就需要注意,因为用户可以通过改动id来跳转到不同的文章(暂且这么叫)

sdsaber answered 10 years, 11 months ago

使用UUID。

lestat answered 10 years, 11 months ago

来一次加随机盐的hash不就行了,随机盐直接明文保存在客户端session里就行了。

7824902 answered 10 years, 11 months ago

太少的信息也不会引起猜测表结构

神隐D从犯 answered 10 years, 11 months ago

你想要加密吗?我看完全没有必要,自行判断是不是合理数字,再去查询数据库,没有则调到其他界面。
文章本来就是公开访问的,若需要授权做权限控制即可

看你提问的这些,把程序实现才是大事。

华西好人集团 answered 10 years, 11 months ago

并没有什么不妥的地方。但是要考虑场景。比如 电商系统 中,如果查看订单号,把自增主键暴漏了,那无疑是暴露了平台的销售情况,给竞争对手来说无疑是绝好的资料。但是至于安全方面却没有什么值得注意的地方,无非还是防止注入什么的。再比如多用户博客系统,暴漏id那就无疑暴漏了平台的总注册用户数、总文章数、总发帖、评论回复数等。同样也对安全没有什么影响。

kkkkuso answered 10 years, 11 months ago

Your Answer