例如:http://stackoverflow.com/questions/396164/exposing-database-ids-security-risk
和http://stackoverflow.com/questions/396164/blah-blah
加载相同的问题。
(我猜这是问题表的DB id?这是ASP.NET的标准吗?)
在您的网络应用中使用此类方案有哪些优缺点?
答案 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)
数据库ID用于在数据库中查找问题。它的数字意味着:快。如果你把它留下来,你必须查找比较慢的标题。
问题本身就是使其“搜索引擎友好”的网址的一部分。它会被g ** gle等排名更高。
答案 2 :(得分:1)
临:
缺点:
答案 3 :(得分:0)
但请记住,在这样的社区中,同时发布相同问题名称的机会更高(尽管仍然很小),这会破坏事物,因此需要应用某种独特的识别,ID可能是在这个特定的Web应用程序开发的上下文中非常符合逻辑。
答案 4 :(得分:0)
我不认为在ASP.NET和其他框架中执行它是不好的做法,并且相当普遍。正如@lassevk所说,如果您的安全性依赖于它,那么您需要更多的检查(用户X可以记录Y),但更多的是归结为公共站点的URL友好性。
例如,SO的网址相当友好:
google在网址的START位置比最后的费率信息,所以看起来像:
https://stackoverflow.com/pros-and-cons-of-using-db-id-in-the-url/q/407120
应该在“在网址中使用db id的利弊得到更高的排名”。这不是唯一的因素,但它是一个非常重要的因素 - 看看亚马逊的格式,他们这样做有很好的理由:
Wordpress这样做:
但是,如果你在同一天发布了两个名为“foo”的帖子,你会得到:
slug(foo / foo2)不是PK,但它在posts表中保持唯一。
我认为将ID放在URL中不是问题,除非您的URL是GUID!方式太长,难以打字。如果它是一个int或某种短的guid(例如6-8个字符),那么它应该不是问题。