ASP.NET MVC 路由 - 您是否在 URL 中公开 ID?

ASP.NET MVC Routing - Do you keep ID's exposed in URL?

我有一个 ASP.NET MVC 应用程序,路由 url 如下所示:

foobar.com/users/8
foobar.com/users/90
foobar.com/exercise/details/5
foobar.com/exercise/details/400

因此,通过此 URL 路由,用户可以直接操作 URL 并更改整数 ID。确保此安全以使用户无法轻易操纵 URL ID 的最佳做法是什么?企业应用程序如何处理这个问题?

许多应用程序都设计为 URL 可破解,因为用户可以更改值。许多用户喜欢操纵 url 来更改页码、记录等

这没什么问题只要你确保它是安全的。例如,您的详细信息操作应在显示之前检查用户是否可以访问记录 5。

对于设计良好的系统,用户操纵 URL 应该不是问题。即使您在 HTTP Post 正文中发送数据,用户仍然可以使用 Burp.

等拦截代理来操作它

依赖ID的保密性(例如随机选择ID)也不是解决办法。在渗透测试术语中,您将容易受到 direct object reference. The classical terminology for this flaw is violation of the complete mediation principle.

与其担心用户可能会对发送到您服务器的 URL 和内容做什么,您应该保护服务器免受恶意输入。这里的问题是授权。我建议您仔细阅读 Securing your ASP.NET MVC 4 App and the new AllowAnonymous Attribute and NerdDinner Step 9: Authentication and Authorization.