Asp.net mvc 如何防止用户篡改查询字符串

Asp.net mvc 如何防止用户篡改查询字符串,asp.net-mvc,Asp.net Mvc,我刚开始读《专业版ASP.NETMVC4》,似乎在书中或网上都找不到我问题的答案 如果说我有一个像这样的url www.something.com/AccountOptions?UserId=1 如何防止用户简单地更改号码和其他用户的选项?有没有一种方法可以传递数据而不在查询字符串中传递数据,从而隐藏数据并防止篡改 编辑检查最后一条评论,以重定向到已回答的问题。不要将userId传回。 在您的操作方法中,调用 User.Identity.GetUserId(); 要获取您的用户Id并将此Id用

我刚开始读《专业版ASP.NETMVC4》,似乎在书中或网上都找不到我问题的答案

如果说我有一个像这样的url www.something.com/AccountOptions?UserId=1 如何防止用户简单地更改号码和其他用户的选项?有没有一种方法可以传递数据而不在查询字符串中传递数据,从而隐藏数据并防止篡改

编辑检查最后一条评论,以重定向到已回答的问题。

不要将userId传回。 在您的操作方法中,调用

User.Identity.GetUserId();

要获取您的
用户Id
并将此Id用于您的授权逻辑

不,不可能,不要依赖任何来自用户的数据。针对查询字符串黑客攻击的唯一防御措施是强验证和变量转义。您应该始终进行服务器端验证,而不管客户端是什么,这就是他们在本书中所说的。永远不要信任您的用户,也不要对所有未被帮助程序方法接受的输入进行HTTP编码@Mike Purcell在验证用户只允许访问其允许访问的区域时,您知道有什么好的读物吗?我可能会使用用户特定视图上的简单成员身份来检查并确保登录的用户具有与查询字符串相同的id。我不熟悉ASP.net实现,但对于PHP,有多种框架提供各种控制访问的方法。在最近的一个项目中,我创建了一个基本的组/角色配置,其中一个用户被分配到一个组,该组被分配到一个角色。然后,当用户登录时,将从数据库中提取他们的凭据,并与整个站点的各个位置进行比较。我不能推荐任何具体的阅读资料(不精通asp.net),但您可以看看Zend或Symfony框架,因为安全原则通常是通用的。