2010-11-02 1 views
1

Я хочу создать виджет вокруг API ajax, который я размещаю на своем сервере. Виджет также будет обслуживаться моим сервером и размещен на сторонних веб-сайтах. Виджет должен иметь доступ к DOM страницы хостинга (поскольку он обращается к данным формы на странице), поэтому он должен быть встроен с использованием тега скрипта, а не в iframe.Как я могу защитить свой виджет ajax?

Когда кнопка нажата, виджет ударит по моему API, получит ответ и введет его в форму страницы хостинга.

До сих пор так хорошо, используя теги скрипта и ajax доброту. Быстрое доказательство концепции работает в течение нескольких минут. Но как я могу удержать четвертую сторону от просмотра кода на странице третьей стороны и копирования его, чтобы иметь виджет на своей странице? Виджет будет свободно доступен для всех, но я хочу знать, кто его использует и контролирует доступ. Я также хочу, чтобы люди не обращались к API без виджета.

У меня есть мозговой штурм тонких идей подписи и хэширования, истекающих токенов, стороннего прокси-сервера на стороне сервера, использования Flash на клиенте и т. Д., Но я не могу придумать что-то определенное, t обходится довольно легко.

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

Возможно, есть еще один способ подумать об этой проблеме?

+0

Возможно, какой-то виджетов? Не видя ничего, что ясно это делает. – Nicholas

+1

OAuth? OpenID? Я немного ошеломлен этими понятиями. Не уверен, что кто-нибудь из них здесь хорошо подходит ... – Nicholas

ответ

0

Ну для тех, кто заинтересован, я придумал решение:

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

Я также потребует 3-й участник веб-сайт, чтобы вставить несколько строк серверного кода (например, PHP), которые генерируют случайный одноразовый номер и объединить его с помощью секретного ключа и создать хэш:

$ одноразового номера = make_nonce(); $ secret = 'ключ, специфичный для этого провайдера'; $ hash = sha1 ($ nonce. $ Secret);

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

Это связывает доступ API к определенным сторонним интеграторам.

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

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

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

+0

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

+0

Упс, не сразу увидел этот ответ. Я бы сделал это, за исключением того, что все запросы поступают от клиента. Я думаю, что то, что я предложил, будет хорошо работать, если я немного изменю скорость. – Nicholas