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

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

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

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

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

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

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

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

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