ASP.NET MVC:在未经授权的情况下使匿名操作安全

时间:2016-07-27 18:55:05

标签: c# asp.net asp.net-mvc asp.net-mvc-4

让我说我的一个控制器中有以下两种操作方法:

[AllowAnonymous]
public async Task<ViewResult> ClearAlerts(string userId)
{
   // Clear the alerts
}

[AllowAnonymous]
public async Task<ViewResult> DenyAlerts(string userId)
{
   // Deny the alerts
}

这两个操作方法的链接由我的应用程序通过电子邮件发送给单个人。 userId是由Identity框架生成的GUID字符串,作为查询参数包含在电子邮件的两个超链接中。

我担心这些匿名方法可能会被接收电子邮件的个人以外的人调用。

我有几个问题:

  1. 有没有办法让匿名操作方法只需一个人访问而无需用户授权?
  2. 有人可能猜到的可能性是多少?一个有效的userId调用这些方法吗?
  3. 我是否应该咬紧牙关并要求获得这些行动的授权?
  4. 任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

某人猜测有效userId的可能性极小,我不担心。

我猜你要检查usermanager的有效用户。因此,如果找不到用户,则表示有人试图“错误地”访问该操作方法。只是默默地忽略并重定向到另一个页面。像这样:

 [AllowAnonymous]
 public async Task<ViewResult> ClearAlerts(string userId)
 {

      if ( string.IsNullOrEmpty( userId ) )
      {
          return RedirectToAction( "Index","Home" );
      }

      var user = await UserManager.FindByIdAsync( userId );

      if( user == null )
      {
          return RedirectToAction("Index","Home");
      }

      // do stuff
 }