2009-08-20 2 views
4

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

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

Мои мысли до сих пор:

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

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

ответ

4

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

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

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

-2

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

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