在URL中使用DB id的优缺点?

时间:2009-01-02 15:32:18

标签: url web-applications url-routing slug

例如:http://stackoverflow.com/questions/396164/exposing-database-ids-security-riskhttp://stackoverflow.com/questions/396164/blah-blah加载相同的问题。

(我猜这是问题表的DB id?这是ASP.NET的标准吗?)

在您的网络应用中使用此类方案有哪些优缺点?

5 个答案:

答案 0 :(得分:4)

嗯,首先,简单的id通常是顺序的,所以很容易猜到并从你的应用程序中检索其他数据。

Load JSON at runtime rather than dynamically via AJAX https://stackoverflow.com/questions/395858/doesnt-matter-what-I-type-here

现在,已经说过,这也可能被视为奖励,因为没有人在他们正确的头脑中会使他们的整体安全性取决于你必须在链接上碰到你的安全数据,因此数据的易发现性可能很好。

然而,有一点是你在某些时候会重新索引你的数据库,如果没有其他原因搜索引擎仍然会有旧的链接,那么使旧的url无效将会很糟糕。

此外,在这里使用像这样的链接到其他问题是很正常的,所以如果他们在某些时候想要重新索引并因此重新编号(或移动到guid),他们仍然必须保持旧的结构和的ID。

现在,这可能会发生或需要吗?可能没有。

我不会太担心它,只需构建您的安全性,就好像应用程序的每个入口点都已知并且应该没有问题。

答案 1 :(得分:3)

  1. 数据库ID用于在数据库中查找问题。它的数字意味着:快。如果你把它留下来,你必须查找比较慢的标题。

  2. 问题本身就是使其“搜索引擎友好”的网址的一部分。它会被g ** gle等排名更高。

答案 2 :(得分:1)

临:

  • 超级轻松检索页面信息。获取ID,调用数据库,中提琴。您的表将(应该)编入索引以使此查找超快。
  • 保证唯一网址。

缺点:

  • 系统中的ID正在公开显示。在像SO这样的公共系统中不是问题。但是,即使在敏感系统上,后端的适当安全措施也不会成为问题。
  • 丑陋的网址。 6位以上的数字很难记住,如果数字全部用于识别页面,则会更难区分页面。这也可能具有SEO后果,因为具有更相关和结构良好的信息的URL通常排名更好。通过在URL中提供帖子名称来补偿。虽然我仍然无法在午餐时向我的伙伴发出特定的帖子,但我仍然可以在浏览器历史记录中找到它。
  • 查找速度较慢。在数据库上进行文本搜索通常较慢。

答案 3 :(得分:0)

但请记住,在这样的社区中,同时发布相同问题名称的机会更高(尽管仍然很小),这会破坏事物,因此需要应用某种独特的识别,ID可能是在这个特定的Web应用程序开发的上下文中非常符合逻辑。

答案 4 :(得分:0)

我不认为在ASP.NET和其他框架中执行它是不好的做法,并且相当普遍。正如@lassevk所说,如果您的安全性依赖于它,那么您需要更多的检查(用户X可以记录Y),但更多的是归结为公共站点的URL友好性。

例如,SO的网址相当友好:

  

Pros and cons of using DB id in the URL?

google在网址的START位置比最后的费率信息,所以看起来像:

  

https://stackoverflow.com/pros-and-cons-of-using-db-id-in-the-url/q/407120

应该在“在网址中使用db id的利弊得到更高的排名”。这不是唯一的因素,但它是一个非常重要的因素 - 看看亚马逊的格式,他们这样做有很好的理由:

  

http://www.amazon.com/Maverick-Ricardo-Semler/dp/0712678867

     

http://server/book-name/dp/book-id

Wordpress这样做:

  

http://server/yyyy/mm/dd/name-of-the-post

但是,如果你在同一天发布了两个名为“foo”的帖子,你会得到:

  

http://server/yyyy/mm/dd/foo

     

http://server/yyyy/mm/dd/foo2

slug(foo / foo2)不是PK,但它在posts表中保持唯一。

我认为将ID放在URL中不是问题,除非您的URL是GUID!方式太长,难以打字。如果它是一个int或某种短的guid(例如6-8个字符),那么它应该不是问题。