Как я могу защитить свой виджет ajax? - PullRequest
1 голос
/ 02 ноября 2010

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

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

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

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

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

Может быть, есть другой способ думать об этой проблеме?

1 Ответ

0 голосов
/ 05 ноября 2010

Хорошо, для всех, кто заинтересовался, я нашел решение:

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

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

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

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

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

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

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

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

...