Как запретить произвольным клиентским приложениям использовать анонимный веб-API? - PullRequest
51 голосов
/ 17 марта 2011

Извинения, если об этом уже спрашивали и отвечали;Я осмотрел кучу, но не нашел именно то, что спрашиваю.

-

  1. Предположим, мое веб-приложение на http://example.com/использует частный и недокументированный веб-API на http://api.example.com/ для извлечения данных, например, через XHR или JSONP.

  2. Также предположим, что это веб-приложение является анонимным - оно делает не требуется логин пользователя.

  3. Поскольку существует связь между клиентом и сервером, любой может открыть Fiddler и т. д., чтобы увидеть точный запрос и ответ, не говоря уже о проверке клиента.код JS стороны.

В таком случае, как вы можете запретить кому-либо использовать ваш API в клиентском приложении не веб ?Например, приложение для iPhone или на стороне сервера.

Насколько я понимаю, пункт № 2 удаляет опцию чего-то вроде OAuth, а пункт № 3 - опцию, например, ключей API или даже SSL.

Я думал о таких вещах, как токены на основе времени или секретные соли, которые вводятся на страницу при первой загрузке, но приложение для iPhone может легко тайно загрузить вашу веб-страницу перед выполнением запросов API.

есть ли какой-нибудь способ, кроме простого обфускации - безопасность через мрак?

-

В случае, если все это слишком абстрактно, вот простой пример:

Google.com выбирает егоавтозаполнение данных через какой-то API, который является частным и недокументированным, но открыт в Интернете.Что мешает мне использовать его в приложении для iPhone?

Ответы [ 4 ]

24 голосов
/ 19 марта 2011

Вы не можете запретить людям копировать ваш клиентский код или воспроизводить сетевой трафик.

Благодаря той же политике происхождения другие веб-приложения не могут получить доступ к вашему API с клиента,Им придется проксировать свои запросы через сервер. Это означает, что эти запросы будут поступать с нескольких легко идентифицируемых IP-адресов, которые вы можете временно поместить в черный список.,Мой совет: не беспокойтесь о них, пока они не станут проблемой.

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

4 голосов
/ 06 сентября 2012

Аутентификация также не предотвращает злоупотребление вашим API. Пока клиент может правильно аутентифицироваться в вашей системе, он может использовать любой клиент, которого он выберет. Вы можете избежать злоупотреблений только в том случае, если клиент и сервер безопасны, а соединение защищено.

Если проблема в злоупотреблении, тогда может быть достаточно простого решения проблемы регулирования.

2 голосов
/ 17 марта 2011

Если у вашего клиента есть код, который скрыт от snoopers, не могли бы вы сделать то, что вы предлагали, использовать соли, IP-адрес и значения на основе времени, зашифровать их и затем сделать то же самое на стороне сервера?Это в основном то, что делает mod_auth_tkt, и это работает хорошо.Или это будет аутентификация?

2 голосов
/ 17 марта 2011

Без ключа API или какой-либо формы авторизации вы будете сражаться в проигрышной битве, пытаясь не допустить посторонних клиентов к вашим услугам.

Вы можете понюхать несколько вещей, но жесткую правду чаще всего легко подделать.

Контролируете ли вы другой веб-сервис? Кроме того, если ваше веб-приложение (http://example.com/) получает доступ к API (http://api.example.com/) через XHR или JSONP, вы можете проксировать данные на своем сервере, используя библиотеку, например cURL, для получения данных, а затем сделать их доступными на твой сайт. Затем вы можете контролировать доступ к нему любым удобным для вас способом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...