Как обезопасить сайт работающий с API?

Ситуация такая. Поставили задачу написать backend с которым будут работать несколько клиентов с разным фронтом. backend будет на отдельном сервере, и по сути является API. Клиенты будут локальными javascript интерфейсами.

Первая сложность с которой столкнулся, это нужно обезопасить API от ботов. То есть к примеру на регистрацию добавить капчу. Но как работать с капчей и API, которые отдаются через ajax?

Вторая сложность это CRSF и iFrame. Допустим у пользователя на компьютере есть два frontend клиента. Каждый и которых просто js файл. Первый написал я, а второй от третьих лиц. И так как домен у них один 127.0.0.1, то они будут иметь общий localStorage и отправлять данные от имени друг друга если куки вернутся.
  • Вопрос задан
  • 1554 просмотра
Решения вопроса 1
sayber
@sayber Куратор тега PHP
Да, я программирую на PHP и еще асинхронно!
JWT, ApiDoc и конечно https
Забыть о сессиях и всякой остальной фигне.

Конечно должны быть кастомные реквесты, жесткие модели и серьезная валидация данных.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
petermzg
@petermzg
Самый лучший программист
Вы не указали, для каких целей пишете API, а от этого многое зависит.

API используется как правило, для взаимодействия сервер-сервер. И тогда у вас нет view уровня.
Капча это view уровень, он не должен иметь отношения к API сервису.
При таком взаимодействии сразу исчезают проблемы с CRSF и iFrame.

CRSF - это только безопастность уровня браузер.
Ответ написан
xmoonlight
@xmoonlight Куратор тега PHP
https://sitecoder.blogspot.com
Проще простого:
1. Регистрация выполняется через капчу
2. Ключ приходит через SMS или E-MAIL
3. При запросах - используется hash-подпись для проверки на стороне сервера.
Подробнее - здесь.
Ответ написан
Tantacula
@Tantacula
Ларавельщик, витающий в небесах.
Ограничить на сервере количество запросов в час/минуту, особо рьяным отправлять капчу. Все. Вы никогда не узнаете, исполняется на клиенте запрос от живого человека или от бота. csrf, jwt - это не та песня, они созданы, чтобы защитить клиента от постороннего вмешательства, но если клиент сам решит написать бота, вы никак не сможете этому препятствовать.
Ответ написан
Captain
@Captain
Делаем сложный функционал под Joomla и не только
Нужно знать кто является клиентом, много ли их. Может быть им проще выдать секретные ключи и подписывать запрос токеном с использованием секрета.
А от ботов защититься будет сложно. Как верно указали выше, ограничить кол-во запросов с одним токеном.
Ответ написан
Ваш ответ на вопрос

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

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