Bandicoot
@Bandicoot
Вась-программист

Как обезопасить проект с полностью раздельным фронтендом и бекендом?

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

Соответственно меня тревожат вопросы по безопасности, т.к. это моя зона ответственности.
В частности - как сделать безопасной аутентификацию?

Пока я сделал так: например, при логине в личный кабинет на сервере генерится и сохраняется в БД токен, отдается фронту, тот сохраняет его в куках или local storage, при каждом GET или POST запросе на бэк передается этот токен, сравнивается с тем что сохранен в БД и если он найден, то разрешаются дальнейшие действия. Токен связан с идентификатором пользователя и имеет ограниченное время жизни.

Насколько это безопасно и как защититься от подделок запросов в целом?
Какие еще вопросы по безопасности нужно закрыть?
  • Вопрос задан
  • 2159 просмотров
Решения вопроса 2
Sanasol
@Sanasol Куратор тега Веб-разработка
нельзя просто так взять и загуглить ошибку
Какие еще вопросы по безопасности нужно закрыть?

ровно всё тоже самое что и при монолитном приложении.
пишите нормальный код без дыр в виде sql инъекций и всякого такого.

Насколько это безопасно и как защититься от подделок запросов в целом?

для вас неважно подделка это или нет.
Запросы выглядят одинаково и в случае отправки с сайта, и в случае отправки например каким-нибудь скриптом "злоумышленника".
Если надо защиту, то делайте проверку авторизации и лимит на количество запросов.
Больше вы ничего не сделаете.

В общем разделение не переворачивает весь сайт с ног на голову, это все тот же сайт со стандартными "угрозами" и защитой от них.
Ответ написан
Tiendil
@Tiendil
Разработчик ПО.
Тут две задачи стоит:

- обезопасить общение между клиентом и фронтендом
- обезопасить общение между фронтендом и бэкендом

Первое делается известными методами, я думаю их перечислять не надо.

Второе можно делать по-разному:

- можно организовать закрытую сеть между всеми серверами (варианты разные: от vpn, до физически отдельной сетки).
- можно делать https соединения, проверяя сертификаты друг друга
- можно подписывать сообщения, например с помощью https://en.wikipedia.org/wiki/HMAC

Можно даже всё вместе сделать - зависит от уровня паранойи.

Передавать креды пользователя в открытом виде, само собой, нельзя. Нужно обезопасить само соединение (например, https использовать) или сами креды (шифровать ключом, известным только фронтенду и бекенду).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@marataziat
Джангист-тракторист
1. Хорошо бы OWASP.org прочитать, чтобы знать что такое SQL иньекции и XSS.
2. Перестаньте делать велосипед, когда вы делаете его опять и опять повышаеться вероятность обосраться, поэтому используйте фреймворки. На пример django-rest-framework
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы