Asp.net mvc 2 MVC2路由和安全性:如何安全地传递参数?

Asp.net mvc 2 MVC2路由和安全性:如何安全地传递参数?,asp.net-mvc-2,query-string,asp.net-mvc-routing,Asp.net Mvc 2,Query String,Asp.net Mvc Routing,我是来自WebForms的相对MVC noob。我想我对MVC有很好的理解,除了几个例外,我想我可能打破了这种模式。我会尽量保持简短,所以我假设我所问的大部分是相对明显的 假设我有一个有文章的新闻网站。在这种情况下,mynewssite.com/Articles/123形式的URL非常有用,因为我不在乎谁看哪篇文章。用户可以将URL中的ArticleID更改为他们想要的任何内容,然后调出该文章。但是,在我的例子中,我只希望用户能够查看/编辑数据实体文章或属于它们的任何内容。为了实现这一点,我使用

我是来自WebForms的相对MVC noob。我想我对MVC有很好的理解,除了几个例外,我想我可能打破了这种模式。我会尽量保持简短,所以我假设我所问的大部分是相对明显的

假设我有一个有文章的新闻网站。在这种情况下,mynewssite.com/Articles/123形式的URL非常有用,因为我不在乎谁看哪篇文章。用户可以将URL中的ArticleID更改为他们想要的任何内容,然后调出该文章。但是,在我的例子中,我只希望用户能够查看/编辑数据实体文章或属于它们的任何内容。为了实现这一点,我使用他们的用户ID GUID作为数据库中的外键,并显示他们的数据列表供他们选择。问题来了。。。当他们单击Url.ActionEdit创建的链接时,新的带有{.id=item.id}我没有使用ActionLink,因为我需要在链接中添加HTML内容,id显示为querystring参数。我可以为它添加一个路由,但id仍然会显示在URL中,供他们篡改。显而易见的含义是,通过篡改URL,他们可以查看/编辑他们想要的任何实体

我错过了什么? 有没有一种不在URL上添加参数而传递参数的好方法?我知道我可以将它们放在页面上的表单中,然后提交表单,但对于我的示例来说,这似乎很麻烦,我在与这个想法相冲突的地方使用jQuery.ajax。 我还可以根据编辑方法中的数据检查他们的用户ID,但这似乎也很麻烦


这个问题是否过于宽泛?请让我知道你需要什么细节。谢谢。

你可以用。这样,当用户进行身份验证时,将发出一个加密的cookie,其中包含他的用户名,该用户名不能被篡改。然后,您可以验证当前连接的用户是否具有编辑此文章的权限。

即使在Winforms中,您也必须在每个请求上添加特殊逻辑,以仅筛选用户拥有的文章。我不明白为什么MVC会有什么不同。当然,您可以使用web.config拒绝访问给定的url,但在使用包含要显示的数据的参数的单个页面时则不行


您最好的选择可能是在数据库级别对其进行过滤。通过添加包含用户id的where子句,应用程序将返回“未找到记录”类错误,您可以对其执行任何操作。

谢谢您的回复。我正在使用表单身份验证。我只是觉得我不应该在每次请求时都检查用户是否有权限访问这些数据。也许这是因为我习惯了WebForms,在那里我可以用FA保护一个文件夹,然后就可以使用它了。我的主要问题是,在这种情况下,MVC传递参数的最佳/标准方式是什么。我想确保我以正确的方式使用MVC。