Как защитить API access_token (React, Laravel) - PullRequest
2 голосов
/ 29 января 2020

Я работаю над приложением (Frontend: React, Backend: Laravel). Когда я делаю запрос на вход в систему, я получаю access_token с сервера Laravel. Я сохраняю этот access_token в localStorage.

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

enter image description here

Если пользователь какое-то время не находится на своем месте, то другой пользователь может украсть этот access_token и вставьте в свой браузер, и теперь другой пользователь сможет получить доступ к приложению в качестве первого пользователя. Кроме того, я видел некоторые дискуссии на других сайтах о том, что localStorage подвержен атаке XSS.

Мой вопрос заключается в том, где должен храниться этот access_token. Если я сохраню access_token в некоторой переменной javascript, то access_token будет потерян, когда пользователь закроет и снова откроет браузер или обновит страницу. И его снова попросят войти в систему, что плохо для взаимодействия с пользователем.

Как я могу защитить access_token от несанкционированного доступа? Каковы лучшие практики?

1 Ответ

1 голос
/ 12 февраля 2020

Хотя этот тип угона возможен и в Facebook и на других веб-сайтах, но вот несколько предложений

Вариант 1

  1. Создайте целевую страницу для вашего фактического приложения.
  2. Добавьте некоторую кнопку на целевой странице, чтобы открыть настоящий веб-сайт с некоторой динамической c аутентификацией токена с ограниченными параметрами браузера, открыв новое окно с javascript например

    www.yoursite.com/secure_login?abc=3jfj834y7827875448548hffhjdhfd8

  3. При прямом просмотре ссылки (www.yoursite.com/secure_login) выдают ошибку. Ваш динамический токен c будет использоваться в качестве сеансового ключа и c. Это похоже на функциональность CSRF.

  4. Отключить щелчок правой кнопкой мыши и F12 на вашем веб-сайте.
  5. Не открывать веб-сайт, если в настройках браузера отключен java -скрипт. Поэтому заставьте пользователя сначала включить java -скрипт.
  6. Очень трудно go проверить элемент сейчас.

Опция 2

  1. Создайте несколько ключей типа access_token с именами honey-spot, например security_key, authourization_token, access_token, login_session et c. Ваш фактический ключ должен отличаться от ключей по умолчанию, используемых глобально в веб-фреймворках.
  2. Инициализируйте их с некоторыми случайными значениями и применив некоторое шифрование, например sha256 et c.
  3. Используйте refre sh Концепция токенов, поскольку ваша строка сеанса будет постоянно обновляться и изменяться
  4. Проверьте, отсутствует ли какой-либо из этих токенов при выполнении запроса, затем заблокируйте этот IP на некоторое время (например, регулирование входа в систему для предотвращения грубого подключения)
  5. Теперь, если вы позволили, скажем, 12 клавишам использовать только одну или две клавиши, на самом деле было трудно получить все переменные (как вы упомянули, если пользователь какое-то время не на месте), и вы можете обмануть их несколькими именами.
  6. Вы даже можете использовать эти несколько сеансов
  7. Вы также можете уменьшить время истечения
...