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


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

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

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

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

数据库 python django mysql 数据库安全

牧羊少年X 10 years, 3 months ago

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

sdsaber answered 10 years, 3 months ago

使用UUID。

lestat answered 10 years, 3 months ago

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

7824902 answered 10 years, 3 months ago

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

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

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

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

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

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

kkkkuso answered 10 years, 3 months ago

Your Answer