@Naght

Можно ли извне изменить fetch данные которые получает сайт?

Обычно во всех уроках по программированию, да и я сам пишу примерно такой код как ниже (конечно, пример утрирован):

fetch('https://site.com')
  .then(response => response.json())
  .then(json => json["permissions"] == "administration" && alert("Добро пожаловать"))

Естественно, там где есть права доступа и т.д. нужно хэшировать, но смысл в том что стало интересно, как можно подделать или подменить эти данные, могут ли злоумышленники увидеть в ответе из сервера не зашифрованные права пользователя и просто их изменить.
  • Вопрос задан
  • 112 просмотров
Пригласить эксперта
Ответы на вопрос 4
dimonchik2013
@dimonchik2013
non progredi est regredi
конечно
это один из методов взлома - менять ID на админа, вдруг прокатит
второй вариант -MITM, сложнее, но тоже можно

а третий - стиллер, от него все равно не спасешься, только не ставить
Ответ написан
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Для этого JWT токен придумали, который, если изменить, не пройдет проверку, т.к. содержит в себе секцию подписи, которая была создана с учетом того, что содержит сам токен. Если влезть в данные токена и что-то там поменять, то функция проверки свалится в ошибку.

Впрочем это не защищает от того, чтобы на странице увидеть то, что там было, но оказалось скрытым, потому что нет прав для просмотра. Поэтому токен и используют в запросах, чтобы с сервера уже не приходило то, чего там быть не должно, а содержимое просто как дополнительная возможность - может применяться чтобы показывать или не показывать блоки, которые бекендеры почему-то отдали с сервера, хотя не должны были. В этом кстати случае хакеру проще посмотреть ответ от сервера, начерта ему ваша верстка, в ответе апи уже содержится всё, что ему нужно.

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

Кроме того, если вы размышляете о фронтенде отдельно, то после запаковки вашего кода с помощью webpack, дотянуться до места, где хранится текущий уровень полномочий, не меняя исходный код, нельзя - в публичной области видимости нет доступа к модулю auth, он работает как безымянная функция, которая лежит в оперативной памяти, но из консоли в него не достучишься. Ну да, теоретически можно влезть в оперативку и долго долго маясь найти адрес где оно лежит, но это чрезвычайно трудно и не стоит того (понимая, что всё что получит хакер - это покажет кнопку "удалить запись", которой у него не было, и при попытке удалить - сервер все равно пошлет его куда подальше)

Есть различные TamperMonkey позволяющие выполнить js скрипт при входе на страницу, но для этого опять же нужно его выполнить внутри вашего кода, а туда он не попадает, а значит и подменить внутри него ничего не может.
Ответ написан
Комментировать
iMedved2009
@iMedved2009
Не люблю людей
Если на том сервере оставили дыру размером с весь проект - то можно.
Ответ написан
Комментировать
firedragon
@firedragon
Senior .NET developer
Первое правило разработки для веба не доверять клиенту.
В вашем коде оно практически нарушено. То есть в коде идет проверка на роль админа.
Перепишите так что бы этого не было.
Впрочем если сервер проверяет роли, то все нормально
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы