Уязвимость проверки кучи Checkmarx WebAPI - PullRequest
0 голосов
/ 24 апреля 2018

Я создал приложение 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:

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

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

После проверки уязвимости с помощью инструмента Checkmarx я получил отчет, в котором говорится:

Индекс метода в строке 55 из / / *** / Controllers / AccountController.cs определяет UserPassword, который предназначен для хранения пользовательских паролей.Однако, хотя незашифрованные пароли впоследствии присваиваются UserPassword, эта переменная никогда не удаляется из памяти.

Я знаю, что строки являются неизменяемыми и остаются в памяти в течение неопределенного времени.

У инструмента (checkmarx) есть предложение, которое гласит:

Особые рекомендации - .NET:

- Вместо хранения паролей в неизменяемомстроки, предпочитают использовать зашифрованный объект памяти, такой как SecureString или ProtectedData.

Я нашел другие предложения, которые также говорят мне использовать SecureString вместо string для манипулирования / хранения пользовательских паролей, но я думаю, что это относится только к приложениям MVC или WPF, я не могу понять, как я могу применить это в контексте ASP.NET WebAPI 2, где я долженпредоставить независимую от языка службу.

У любого есть предложение о том, как я могу достичь этого уровня безопасности (или даже если это возможно) в ASP.NET WebAPI 2?

...