Можно ли ограничить API только одним веб-интерфейсом / приложением? - PullRequest
3 голосов
/ 29 февраля 2012

У меня вопрос по поводу политики кросс-происхождения.

У меня есть веб-приложение, которое получает данные, обычно в формате JSON, через ajax.

При инициализации веб-приложения с сервера с помощью ajax создается уникальный «ключ» или «токен», который отправляется клиенту в качестве средства для его идентификации. Токен отправляется обратно при каждом вызове ajax в целях проверки. Если он не проверен в течение двух часов, PHP-скрипт удаляет его, и пользователь должен снова подтвердить свою подлинность.

Если пользователь отправляет еще один вызов ajax (т. Е. Если активность с соответствующим токеном), токен устанавливает срок действия еще на 2 часа.

При каждом вызове я проверяю токен и затем обрабатываю запрос. Все работает хорошо, но моя проблема ориентирована на безопасность.

Поскольку токен хранится на стороне клиента (очень грубо, как window.token = 'YTM0NZomIzI2OTsmIzM0NTueYQ==';), злоумышленники не смогут проверить код, скопировать JavaScript, включая токен, и создать другое приложение, которое будет получить доступ к тем же данным?

1 Ответ

3 голосов
/ 29 февраля 2012

Since the token is stored client-side (very crudely, like window.token = 'YTM0NZomIzI2OTsmIzM0NTueYQ==';), won't it be possible for malicious users to inspect the code, copy the JavaScript including the token, and create another app that will access the same data?

Да.

И, возможно, еще более тревожным для вас может быть следующее: не имеет значения, как ваш токен хранится на стороне клиента - они даже смогут войти в систему, используя тот же API, который вы предоставляете ваши пользователи для входа в систему. (И если вы думаете, что у вас нет API входа в систему, потому что это пост в форме или что-то подобное, вы обманываете себя - пост в форме - такой же «API», как и все остальное. .. и может быть легко воспроизведен в другом месте).

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

...