Asp.net mvc ASP.NET MVC路由-您是否保留ID';在URL中暴露了什么?

Asp.net mvc ASP.NET MVC路由-您是否保留ID';在URL中暴露了什么?,asp.net-mvc,security,url-routing,Asp.net Mvc,Security,Url Routing,我有一个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,这些ID是整数。保护这一点的最佳实践是什么,这样用户就不会轻易地操纵URL ID的地址?企业应用程序如何处理这个问题 许多应用程序都设计为可对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,这些ID是整数。保护这一点的最佳实践是什么,这样用户就不会轻易地操纵URL ID的地址?企业应用程序如何处理这个问题

许多应用程序都设计为可对URL进行黑客攻击,因为用户可以更改值。许多用户喜欢操纵url来更改页码、记录等


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

对于设计良好的系统,用户操纵URL不应该是问题。即使您在HTTP Post正文中发送数据,用户仍然可以使用拦截代理(如)对其进行操作

依靠ID的保密性(例如,随机选择ID)也不是一个解决方案。在pentester术语中,您将容易受到攻击。此缺陷的经典术语是违反


不要担心用户会对发送到服务器的URL和内容做什么,您应该保护服务器不受恶意输入的影响。这里的问题是授权。我建议您仔细阅读和。

通常,您希望能够轻松访问友好的URL。然后,开发人员的工作就是利用mvc提供给我们的工具,[Authorize()]属性,根据需要应用于控制器类/方法。此外,将根据控制器方法内的业务逻辑授予有限访问权限。那么,将ID编码为GUID是否有失偏颇?您是指对uri进行编码吗?这实际上取决于您想要提供的用户体验。该站点的用户会在人类可读的URL中找到实用程序吗?该站点是否允许匿名用户,用户是否获得共享链接的实用程序?对于用户而言,URI不具有可读性。将不会共享链接,此练习纯粹是为了在不进行用户修改的情况下保护URL。如果访问被正确地选通,您仍将具有相同的安全级别。话虽如此,我看不出有任何理由不使用guid而不是Int。我只是不会依赖它作为避免未经授权访问的唯一手段。浏览器历史就是一个很好的例子。