Как я могу проверить, является ли XMLHttpRequest для моего открытого API из моего собственного веб-приложения или от стороннего клиента (для обеспечения приоритета)? - PullRequest
1 голос
/ 23 января 2011

Кто-нибудь знает способ проверки на стороне API, был ли сделан запрос XMLHttpRequest из моего собственного веб-приложения (т.е. из написанного мной JS) или из стороннего приложения ...

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

Я, очевидно, мог бы отправить некоторые недокументированные параметры, но они могут быть подделаны.

У кого-нибудь есть идеи?

Ответы [ 3 ]

2 голосов
/ 23 января 2011

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

Один из способов сделать это - использовать два разных URL-адреса API, например:

  • /api?client=ThirdPartyAppName&... для сторонних приложений (рекомендуется использоватьэтот URL)
  • /api?token=<number generated from hidden fields from the HTML page using obfuscated code>&... для вашего собственного JS

Обратите внимание, что, как вы упоминаете, невозможно полностью прекратить разработку собственного кода.Хотя это может занять больше времени, даже скомпилированный двоичный код, написанный на таких языках, как C ++, может быть подвергнут обратному проектированию, и это угрожает любому подходу, полагаясь на секретность .

2 голосов
/ 23 января 2011

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

0 голосов
/ 23 января 2011

На ум приходит пара идей. Я понимаю, что секреты не вечны, поэтому я согласен, что это не очень хороший вариант.

  • Вы можете запустить другой экземпляр на другом нерекламированном порту

  • Вы можете сделать это через SSL и использовать сертификаты для идентификации клиента

  • Простой, но менее безопасный способ - использование файлов cookie

  • Вы можете перейти по IP-адресу, но это может быть административным кошмаром

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