2012-02-29 2 views
3

У меня есть вопрос относительно политики кросс-происхождения.Можно ли ограничить API только одним веб-интерфейсом/приложением?

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

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

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

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

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

+2

Вкратце: да. :) – deceze

+2

Да, и вы ничего не можете с этим поделать. – SLaks

+0

Я не знаю PHP, но разве он уже не содержит функции сеанса? –

ответ

3

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-запрос, который я хочу, с рабочего стола или сервера. Я даже могу настроить службу, которая позволяет мне проксировать все запросы, сделанные моей службой, на вашу службу ... поэтому междоменная безопасность в браузерах не поможет вам.

+0

Святой бэтмен безопасности! Спасибо за точный ответ. –

Смежные вопросы