C# 防止在mvc中访问操作的最佳方法

C# 防止在mvc中访问操作的最佳方法,c#,asp.net-mvc,visual-studio,authentication,C#,Asp.net Mvc,Visual Studio,Authentication,在一个旧的MVC1项目中,我为用户添加了一个编辑其详细信息的选项。我没有使用表单身份验证(主要是因为我不应该大量更改以前的代码),所以我正在尝试想出最好的方法,只允许当前登录的用户编辑其详细信息 目前,如果URL为,其他用户只需更改用户ID即可编辑其他用户的详细信息 我所能想到的方法是在方法内部检查userId是否与参数匹配,但我不知道是否有更好的方法 让我道歉,因为我明白这个问题显示了我的基本知识 谢谢为什么不让您正在检查的用户id作为参数?如果编辑页面不允许任何人编辑任何其他人的信息,那么根

在一个旧的MVC1项目中,我为用户添加了一个编辑其详细信息的选项。我没有使用表单身份验证(主要是因为我不应该大量更改以前的代码),所以我正在尝试想出最好的方法,只允许当前登录的用户编辑其详细信息

目前,如果URL为,其他用户只需更改用户ID即可编辑其他用户的详细信息

我所能想到的方法是在方法内部检查userId是否与参数匹配,但我不知道是否有更好的方法

让我道歉,因为我明白这个问题显示了我的基本知识


谢谢

为什么不让您正在检查的用户id作为参数?如果编辑页面不允许任何人编辑任何其他人的信息,那么根本没有理由使用
用户id
参数——只需让它编辑发出请求的用户。

为什么不让您正在检查的
用户id
作为参数?如果编辑页面不允许任何人编辑其他人的信息,那么根本就没有理由使用
userId
参数——只需让它编辑发出请求的用户即可

if( currrentUser.Id != userId )
  return Redirect( "http://example.com/access-denied" );
如果您已经知道登录的用户,那么只需添加一个检查,查看它是否与要编辑的用户id匹配。如果不匹配,请不要让他们知道


如果您已经知道登录用户,则只需添加一个检查,查看它是否与要编辑的用户id匹配。如果不匹配,则不要让他们知道。

您当前如何跟踪登录用户?会话值?以前的代码用于身份验证的是什么?只是用户名(实际上是电子邮件,它是唯一的)和用户ID的cookies。您当前如何跟踪登录的用户?会话值?前面的代码用于身份验证的是什么?只是用户名(实际上是电子邮件,它是唯一的)和useridiep的cookies,基本上我就是这么想的。所以你认为这是最好的办法是的,基本上我就是这么想的。所以你认为这是最好的办法我想我没把你弄明白。这意味着通过当前设置的cookies获取当前用户?那么应该做什么样的检查呢?n@mitomed:只是用户是真实的(即:他们实际登录,而不仅仅是伪造“这是我的用户id…诚实!”cookie)。如果编辑页面不应该编辑当前用户以外的任何其他用户,那么您需要做的就是验证当前用户是否有效。如果是,则显示该用户id的编辑页面。如果没有
用户id
参数(除了他们自己的id之外),用户可以编辑的唯一用户页面就是他们自己的页面。谢谢赵,问题是除了检查cookie之外,我不知道获取用户的其他方法。从你刚才告诉我的来看,这是一种垃圾,不是吗?@mitomed:一般来说,是的。除非你对cookie加密或添加哈希或HMAC,否则你不能相信cookie来自你,而不是有人调整cookie说他们是站点管理员或其他什么。以这种方式信任会话cookie是可以的……但不是具有用户ID的客户端cookie。好吧,我想我没有正确地理解您。这意味着通过当前设置的cookies获取当前用户?那么应该做什么样的检查呢?n@mitomed:只是用户是真实的(即:他们实际登录,而不仅仅是伪造“这是我的用户id…诚实!”cookie)。如果编辑页面不应该编辑当前用户以外的任何其他用户,那么您需要做的就是验证当前用户是否有效。如果是,则显示该用户id的编辑页面。如果没有
用户id
参数(除了他们自己的id之外),用户可以编辑的唯一用户页面就是他们自己的页面。谢谢赵,问题是除了检查cookie之外,我不知道获取用户的其他方法。从你刚才告诉我的来看,这是一种垃圾,不是吗?@mitomed:一般来说,是的。除非你对cookie加密或添加哈希或HMAC,否则你不能相信cookie来自你,而不是有人调整cookie说他们是站点管理员或其他什么。以这种方式信任会话cookie是可以的,但不信任具有用户ID的客户端cookie。