Как скрыть заголовки авторизации, используя Spring boot и приложение Angular

Я реализовал аутентификацию JWT с использованием безопасности Spring. Поскольку заголовок авторизации виден в браузере, злоумышленник может манипулировать данными, используя токен, который присутствует в заголовке авторизации. Есть ли способ ограничить это. Я использую Spring boot и Angular 8. Любая помощь приветствуется.

Пример для манипулирования данными введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Всего 2 ответа


Нет способа скрыть информацию из браузера. Это взаимодействие клиент-сервер, поэтому пользователь всегда может изучить HTML-содержимое страницы, заголовки Http или параметр запроса с помощью инструментов dev.

Чтобы обезопасить ваше общение, используется протокол Https (поэтому контент, включая заголовки, шифруется), а также короткий токен JWT (с использованием даты истечения срока действия и токена обновления), поэтому злоумышленнику труднее выдать себя за кого-либо.


В принципе, вы никогда не можете доверять клиенту. Вам приходится иметь дело с манипулируемыми данными.

Это означает, что вам всегда нужно проверять запросы клиентов, несмотря ни на что.

На высоком уровне, есть много решений этой проблемы.

1) В случае с by-by, для меня это типичное не обновляемое поле, потому что тот, кто создал что-то, никогда не меняется.

1a) в JPA столбец может быть аннотирован с помощью updatable=false так что это всегда будет игнорироваться для операции слияния.

1b) другой вариант - сначала загрузить элемент из памяти и использовать только атрибуты из запроса, которые вы разрешаете сохранить для этого бизнес-случая, скопировать разрешенные значения в загруженный элемент и объединить загруженный элемент в базу данных.

2.) в других случаях, например, для поля «обновлен», необходимо перепроверить, совпадает ли аутентифицированный пользователь с идентификатором «обновлен». если не поднять исключение / 401 независимо.

3) Я думаю, что это больше подходит к вашему решению. Я также предлагаю не переносить все данные, которые хранятся для элемента, лучше использовать Transfer Object или Use Case Objects. Используя объекты переноса или объекты прецедента, он фактически скрывает данные, потому что вы переносите только выделенные данные. Это также рекомендация по безопасности, потому что некоторые данные вы просто не хотите никому показывать, поэтому, если вы прячете их на стороне клиента, но если они уже отправлены клиенту, опытный пользователь всегда может сделать данные видимыми при проверке или манипуляция. Только представьте, что вы отправляете информацию о зарплате о человеке каждый раз, когда отображаете человека ... Широко используемым решением для сопоставления объектов данных для передачи объектов и обратно является библиотека mapstruct.

Надеюсь, это поможет найти хорошее решение.


Есть идеи?

10000