在URL中公开DB内部ID是不好的做法吗?

Sim*_*eon 6 java database url obfuscation web

在URL中公开DB内部ID是不好的做法吗?

例如,假设我有一个users表,每行有一些ID(主键).暴露URL myapp.com/accountInfo.html?userId=5,在哪里5是一个真正的主键,被视为"坏事",为什么?

还假设我们正确防御SQL注入.

我最感兴趣的是与Java Web技术堆栈相关的答案(因此是java标签),但一般的答案也会非常有用.

谢谢.

rek*_*ire 7

这取决于您解析URL的方式.如果允许盲目的SQL注入是不好的.您只需要从用户输入验证id.

Stackexchange还会将行的id放入URL中,如地址栏中所示.诀窍是解析部分并获得所有可能的SQL.简单的方法是检查id是否为数字.

  • Instagram也公开了photo-ID http://instagram.com/p/1.我想如果网站读取很重并且数据无法修改且不是关键任务,那么公开id是安全的. (2认同)

wat*_*ios 7

在URL中传递并不是坏事,因为它对最终用户没有多大意义 - 如果您在运行应用程序时依赖该值,那么这只会是一个坏处.例如,您不希望用户注意到userId = 5并将其更改为userID = 10以显示另一个人的帐户.

将此信息存储在服务器上的会话中会更安全.例如,当用户登录时,其userID值存储在服务器上的会话中,并且每当查询数据库时都使用此值.如果你这样做,通常不需要通过URL中的userID,但是它不会受到伤害,因为它不会被你的DB查询代码使用.