Проблемы безопасности с отправкой конфиденциальной информации после неудачной отправки формы - PullRequest
0 голосов
/ 31 января 2019

У меня есть приложение ASP.NET Core, в котором я должен собрать небольшую информацию о кандидате.Одним из полей является SSN.

У меня есть действие GET в моем контроллере, которое отображает поля формы.Это выглядит так:

[HttpGet]
[Route("~/applicant/")]
public IActionResult Applicant(int id, Guid guid)
{
    var model = CreateEmptyViewModel();
    return View(model);
}

У меня в контроллере есть действие POST, которое проверяет правильность отправки формы и переходит или перезагружает форму соответственно.

[HttpPost]
[Route("~/post-applicant")]
public IActionResult PostApplicant(MyViewModel model)
{
    if (model == null) throw new ArgumentNullException(nameof(model));

    if (ModelState.IsValid)
    {
        // code that moves on
    }
    else
    {
        TempData["Error"] = "The form is incomplete or corrections are needed.";
        return View(nameof(Applicant), model); // reloads form with fields filled out
    }
}

MyМодель представления выглядит следующим образом:

public class MyViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string SSN { get; set; }
}

Все свойства в MyViewModel являются обязательными.Если пользователь решит ввести SSN, но не имя, отправка формы завершится неудачно, и форма будет перезагружена.

Существуют ли какие-либо последствия для безопасности при перезагрузке формы с недавно введенной конфиденциальной информацией?Есть ли лучший способ сделать то, что я делаю?

Ответы [ 2 ]

0 голосов
/ 31 января 2019

Шифрование ваших запросов и ответов с помощью SSL является хорошим первым шагом, но само по себе оно не является решением.HTTPS-трафик может быть перехвачен, и атаки «человек посередине» вызывают серьезную озабоченность, особенно в незащищенных сетях, таких как общедоступный Wi-Fi.Если вы не можете быть уверены, что все ваши пользователи работают с новейшими и лучшими платформами со всеми примененными исправлениями безопасности и всегда подключены к защищенным сетям напрямую или через безопасную VPN, то вы не можете просто отмахнуться от PII так хорошо, потому что это HTTPS.Даже в этом случае всегда есть подвиги нулевого дня, которые вы никогда не сможете объяснить.

Длинные и короткие, вы должны всегда рассматривать все чувствительные PII как священные и никогда не передавать их по линии, если вам не нужно.Первоначальный сбор является одним из таких случаев, но это не означает, что он должен вернуться через строку в случае ошибки.Совершенно нормально заставить пользователя повторно вводить конфиденциальную информацию снова, и большинство пользователей склонны понимать, почему они должны.Например, если вы допустили ошибку в форме оплаты кредитной картой, номер вашей кредитной карты уже не был заполнен - ​​это было бы серьезным нарушением PCI.

Итак, в вашем действии контроллера,вы должны сделать следующее:

ModelState.Remove("SSN");
model.SSN = null;
return View(model);

Тем не менее, возможно, что PII, возможно, еще хуже в этой точке.Благодаря Equifax, практически каждый SSN уже открыт.Тем не менее всегда полезно подумать о том, какие данные вы отправляете туда и обратно.

0 голосов
/ 31 января 2019

Пока вы используете HTTPS, это не влияет на безопасность.

Единственный способ улучшить его - это выполнить POST как AJAX-запрос в фоновом режиме.Тогда вам нужно только вернуть сообщение об ошибке, если оно есть.Единственным реальным преимуществом является улучшение взаимодействия с пользователем, поскольку им не нужно ждать полного обновления страницы.Вот пример этого: https://stackoverflow.com/a/6960586/1202807

Но то, как вы это делаете, тоже хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...