От чего защищаемся когда id не id

80
30 марта 2022, 22:30

Сижу читаю статью с хабра, постепенно перенося код из презентации в тестовое приложение.

Добрался до следующего фрагмента, впал в ступор:

Стало лучше? Стало! А еще мы теперь этот метод можем повторно использовать в разных контроллерах. Результат налицо. Давайте посмотрим на реализацию этого метода.

public void UpdateEmail(int id, string email)
{
    try
    {
        using (MiniProfiler.Current.Step("Update email"))
        {
            email = email.ToLower();
            var user = _userRepository.ById(id);
            if (user.Id != id)
            {
                var message = $"Попыткаизменитьчужиеданные {user.Id}/{id}";
                _logger.LogWarning(message);
                throw new SecurityException(message);
            }
            user.Email = email;
            _dbContext.SaveChanges();
        }
    }
    catch (DbUpdateException e)
    {
        _logger.LogCritical(e.Message);
        throw;
    }
}

Я что-то не особо понимаю, в чём смысл проверки user.Id != id, в каких случаях вообще возможна какая-то атака, что нужно отдельно предусмотреть данную проверку с выбросом SecurityException

На входе у нас int, не строка, значит навтыкать каких-то спецсимволов для эксплуатации sql injection не выйдет. В репозитории наверняка стоит тривиальное (см. код из предыдущих слайдов):

        var user = _dbContext.Set<User>()
                             .FirstOrDefault(x => x.Id == id);

То есть мы ищем в базе x.Id == id и нам зачем-то приходит в голову тут же проверить, а вдруг они перестали быть равны.

Зачем??? Не понимаю, может кто понимает и объяснит?

Answer 1

Автор статьи ответил в личной переписке:

В слайдах ошибка. Должно быть var user = _context.CurrentUser. Имеется в виду проверка на то, что авторизованный пользователь пытается изменить данные другого пользователя

READ ALSO
Как правильно сделать One to one or zero в fluent api?

Как правильно сделать One to one or zero в fluent api?

Есть 2 объекта которые должны друг от друга зависеть, но один из них может отсутствовать при заполнении пишет:

77
Нужна помощь с версткой (HTML)

Нужна помощь с версткой (HTML)

Всем, доброго времени сутокНазрел интересный вопросик относительно верстки блоков-карточек (по крайней мере я их так называю)

96
Как вставить на web страницу тег так чтобы он не работал, но его видел пользователь?

Как вставить на web страницу тег так чтобы он не работал, но его видел пользователь?

Начал изучать html и решил заодно создать сайт на котором я буду конспектировать свои знанияХочу вставлять теги и т

85