Защита веб-службы JSON - PullRequest
       4

Защита веб-службы JSON

4 голосов
/ 20 августа 2009

У меня есть веб-сервис JSON, который я хочу предоставлять только для определенных сайтов. Это сервис, который будет вызываться через JavaScript с использованием JSONP. Как бы я мог предотвратить (или, в лучшем случае, затруднить) несанкционированный доступ к нему? Требование пользователя / пароля не будет работать, потому что это было бы ясно видно в JavaScript.

Пример: мой веб-сервис на domain.com предоставляет информацию о погоде, и я хочу, чтобы только website.com и webpage.com имели к ней доступ. Но поскольку доступ к веб-службе осуществляется через JavaScript, lazywebsite.com может просто просмотреть исходный код веб-сайта / веб-страницы и скопировать / вставить их код JavaScript.

Пока мои мысли:

  • Используйте ключ API и введите HTTP_REFERER того, откуда осуществляется доступ к службе. Это не идеально, так как HTTP_REFERER ненадежен.
  • Попросите веб-сайт website.com/webpage.com создать уникальный ключ на стороне сервера, используя предоставленный мной алгоритм, сохранить его в сеансе и использовать его в качестве ключа для доступа к веб-службе. Таким образом, токен регистрируется только для этого конкретного посетителя, и JS не может быть скопирован / вставлен. Затем проблема переходит на сайт website.com/webpage.com, который защищает их страницу, генерирующую уникальный ключ.

Есть ли лучшие решения?

Ответы [ 2 ]

4 голосов
/ 20 августа 2009

Нет идеального пути.

Если вы серьезно относитесь к безопасности, решение состоит в том, чтобы не публиковать ваш сервис JSON в мире. Сделайте его приватным и потребуйте, чтобы website.com и webpage.com отправляли частный внутренний запрос со своих серверов на ваши данные. Затем вы можете аутентифицировать все, что вы хотите, и секреты остаются в безопасности в коде своего сервера. В основном это решение по доверенности. (Одно приятное преимущество: ваши данные JSON теперь будут иметь то же происхождение, что и веб-сайт, а это значит, что вам не нужно делать взломы JSONP).

Если вы менее серьезно относитесь к безопасности и просто хотите усложнить, самые простые вещи, которые вы уже изложили. Проверьте Реферер. Этот заголовок может быть подделан, но это боль, и, надеюсь, большинство злоумышленников не подумают попробовать это. Также потребуйте пароль и / или API-ключ (они эквивалентны) и запутайте его внутри Javascript, чтобы было труднее получить доступ.

0 голосов
/ 13 декабря 2011

В качестве обновления к этому старому вопросу я рекомендую вам взглянуть на то, что API-интерфейсы Facebook и Twitter для безопасности делают.

...