Я пытаюсь найти, есть ли хороший способ предотвратить использование CSRF в виджетах javascript, встроенных на веб-сайты клиентов.
Виджет позволит конечным пользователям делать запросы против учетных записей наших клиентов через JSONP на сервер PHP, который проксирует эти запросы для нашего (непубличного) API.
К этому моменту я не придумал верный способ обеспечить, чтобы все запросы поступали только с сайтов наших клиентов. Некоторые идеи, которые у меня были:
- Токены, сгенерированные на стороне сервера, и переданные вместе с каждым последующим запросом JSONP (не уверены, как аутентифицировать первоначальный запрос, поскольку, поскольку первый токен был доступен для чтения в JS, и каждый может запросить "следующий" токен)
- Проверка заголовка Referer (ненадежная, может быть подделана или просто не передана браузером)
- Использование SSL (конечно, поможет, но не решает проблему CSRF)
Возможно ли это? Я встретил виджет Fotomoto, который, похоже, позволяет использовать тот же тип функциональности, который мы ищем, но не уверен, как они это делают.