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