Checkmarx堆检查漏洞WebAPI

时间:2018-04-24 19:16:23

标签: c# security asp.net-web-api2 checkmarx

我已经构建了一个ASP.NET WebAPI 2应用程序,我的一个控制器有一个允许用户登录的方法,这样的东西:

[Route("login")]
[HttpPost]
[SwaggerOperation(Tags = new[] { "ACCOUNT" })]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(ReturnModel<AccountModel, HttpStatusCode>))]
public HttpResponseMessage Login([FromBody]LoginDto userData)
{
   ReturnModel<AccountModel, HttpStatusCode> returnObj = new ReturnModel<AccountModel, HttpStatusCode>();

   try
   {
      returnObj = accountService.Login(userData.UserLogin, userData.UserPassword);

      if (returnObj.Success)
      {
         ...
      }
      else 
      {
         ...
      }

      return Request.CreateResponse(returnObj.StatusCode, returnObj);
   }
   catch (Exception ex)
   {
      LogUtil.Error(ex);
      return Request.CreateResponse(HttpStatusCode.InternalServerError, returnObj);
   }
}

LoginDto class:

public class LoginDto
{
   [Required]
   public string UserLogin { get; set; }

   [Required]
   public string UserPassword { get; set; }
}

使用Checkmarx工具检查漏洞后,我收到了一条报告:

  

第55行的方法索引   的 / / *** /控制器/ AccountController.cs   定义UserPassword,指定包含用户密码。   但是,虽然稍后将明文密码分配给UserPassword,   永远不会从内存中清除此变量。

我知道字符串是不可变的,并且在不确定的时间内保留在内存中。

该工具(checkmarx)有一个建议:

  

具体建议 - .NET:

     

- 不要将密码存储在不可变字符串中,而是使用加密的内存对象,例如SecureString或ProtectedData。

我发现其他建议也说我使用 SecureString 而不是字符串来操纵/存储用户密码,但我认为这仅适用于MVC或WPF应用程序,我无法弄清楚如何在ASP.NET WebAPI 2上下文中应用它,我必须公开与语言无关的服务。

任何人都对如何在ASP.NET WebAPI 2上实现此级别的安全性(或者即使可能)有任何建议?

0 个答案:

没有答案