Подделка межсайтовых запросов и аудит безопасности - PullRequest
0 голосов
/ 23 октября 2018

У меня есть ситуация, которую я постараюсь описать.У меня есть проект MVC, который прошел аудит безопасности от компании, которая хочет его использовать.Проблема, с которой они сталкиваются, заключается в том, что они законно входят на сайт с надлежащей учетной записью и получают 2 файла cookie (.ASPXAUTH и ASP.NET_SessionId)

Затем они ищут один из моих вызовов метода, который я вызываю с помощью jquery.,По сути, это ссылка API на метод POST.

Затем они копируют легальные токены и создают файл JS, вызывают мой метод с того же ПК, возможно, из того же браузера, и метод работает, и они публикуют некоторые вещи.точно так же, как я сделал бы из звонков Jquery.

Теперь они говорят мне, что это плохо, и я должен добавить токен Anti Forgery.Хорошо до настоящего момента.

Итак, я добавляю токен защиты от подделки на каждую страницу Razor в проекте, например @Html.AntiForgeryToken(), а также я нахожу способ добавить токен в каждый запрос ajax:

$(document).ready(function () {
  $.ajaxSetup({
    beforeSend: function (xhr) {
      xhr.setRequestHeader("__RequestVerificationToken",  $('input[name=__RequestVerificationToken]').val());
    }
  });
});

На стороне MVC я проверяю это так:

public sealed class ValidateHeaderAntiForgeryTokenAttribute : FilterAttribute, IAuthorizationFilter
{
  public void OnAuthorization(AuthorizationContext filterContext)
  {
    if (filterContext == null)
    {
      throw new ArgumentNullException("filterContext");
    }

    var httpContext = filterContext.HttpContext;
    var cookie = httpContext.Request.Cookies[AntiForgeryConfig.CookieName];
    var token = httpContext.Request.Headers["__RequestVerificationToken"];
    if (token == null)
      token = "";

    AntiForgery.Validate(cookie != null ? cookie.Value : null, token);
  }
}

На всех методах / контроллерах, которые я хочу проверить для этого, я добавляю [ValidateHeaderAntiForgeryToken] Это прекрасно работает.Не жетон, не игра вокруг.Просто и красиво.

Итак, к счастью, я делаю обновление и прошу их снова протестировать.

Они делают то же самое, входят в систему, переходят на страницу, которая вызывает мой метод POST API, и копируютвсе куки (еще один сейчас) и снова запустите их скрипт, и он работает.

Обычно они не могут получить ни одного куки, так как сайт работает по HTTPS.

Итак, есть ли способчтобы предотвратить это?Или их просьба смешна?Потому что, если он удалит их пользователя, они вообще не получат ни куки, ни токен.

Заранее благодарен за любую помощь по этому вопросу.

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