Загрузка...

Безопасность запроса

Тема в разделе Node.js создана пользователем Mi7kiro 2 июл 2023. 193 просмотра

  1. Mi7kiro
    Mi7kiro Автор темы 2 июл 2023 0 18 апр 2021
    Делаю веб приложение на react и сервер на express sequelize mysql, когда пользователь логинится ему дается jwt токен и авторизация запросов на сервер для взаимодействия с бд происходит через токен, но если мне надо чтобы допустим человек на клиенте нажимает кнопку получить 30 бесплатных монет, соответственно надо отправить на сервер запрос на изменение количества монет в бд у юзера, но для авторизации же передается только токен и человек может тупо его взять из заголовка и также отправить запрос и изменить себе деньги, так как авторизировать запросы именно от сервера, чтобы посторонний не мог взаимодействовать с бд. Точнее как принято это делать
     
    2 июл 2023 Изменено
  2. constsvetlov
    constsvetlov 2 июл 2023 n(1) 231 29 янв 2023
    Почему у тебя бизнес логика на клиенте. Переводи на бэк её.
     
    2 июл 2023 Изменено
    1. Посмотреть предыдущие комментарии (7)
    2. constsvetlov
      Mi7kiro, юзеры и не видят и не могут. Лишь те кто зайдут в дебаггер, это не скрыть.
      Так, а зачем отправлять запросы к базе с клиента. Бэк сам должен этим возится, ему лишь приходит твой ответ подобну ниже примеру(я не юзал jwt-token и подобно, но суть не меняет). И не обязательно jwt токены юзать, можешь куки авторизацию проверять
      [IMG]
    3. Mi7kiro Автор темы
      vtlstolyarov, подключение к бд и идет на сервере, с помощью sequelize, там же созданы роуты допустим POST localhost:3002/get-free-coins, на сервере на этот роут есть middleware обработчик, который проверяет валидность jwt токена и если его нет, либо он не валидный возвращает 401, но токен то надо как то отправить на сервер, соответственно он передается в в запросе от клиента в заголовке Authorization: Bearer {token}. Ну и если проверка вернула next(), то пропускает на роут и там допустим обновляется значение в бд уже на сервере
      3 июл 2023 Изменено
    4. vtlstolyarov
      Mi7kiro, ну значит всё правильно настроено - что именно тебя смущает в этой схеме? Да - юзер может подсмотреть в DevTools свой auth токен и может сам слать запросы на сервер симулируя обычный клиент - от этого ты защититься не можешь никак.

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

      Но вообще в таких случаях на сервере надо делать проверки которые сделают бессмыссленным подделывание запросов - например если получать бесплатные монеты можно только 1 раз в сутки, то надо на сервере проверять если пользователь уже в эти сутки получал монеты то не выдавать ему больше, таким образом взломщик может сколько угодно раз слать этот запрос, но монеты ему будут приходить только 1 раз в сутки.
    5. Посмотреть следующие комментарии (2)
Загрузка...
Top