пятница, 25 января 2008 г.

сценарий поддверждения удаленных вызовов через xml-rpc

Написать плагин социальной сети не составляет большого труда. В который раз повторю старую истину: написать исполняемый код (исходник) можно за один - три дня. Я этого пока не делаю по следующим причинам: пока что нет детального представления работы плагина и протокола обмена данными. Есть уже точное понимание как будет работать плагин на каждом участке. Я писал про уведомление о новом комментарии. Как это я описал раньше есть лазейка для спамеров. Когда вы оставляете комментарий на блоге у друга, этот блог должен уведомить вас о новом вашем комментарии: ваш блог должен ответить либо отказом, либо согласием, либо ожидает модерации. Предположим, что спамер послал вам уведомление о якобы вашем комментарии - тогда вы будете завалены спамом. Вывод: вызов всех удаленных функций (rpc - remote procedure call) должен иметь еще один параметр - типа сессионный ключ/пароль доступа для обратного подтверждающего вызова (callback). Получается масло масленое - подтверждение подтверждения. Продемонстрирую как оно будет работать:

1. Клиент уведомляет блог автора комментария
2. Блог автора получает уведомление
3. Блог автора проверяет урлы и запрашивает у вызвавшего клиента, что это именно он уведомляет
4. у клиента запускается сервер, который получает запрос на подтверждение - он сравнивает полученные данные с имеющимся в базе (сессионный ключ) и дает отмашку
5. Блог автора получает от клиента подтверждение и после этого наконец таки дает ответ клиенту и соответственно может забрать комментарий к себе.

Можно немного оптимизировать вызовы и в пункте 3 сделать один вызов для подтверждения уведомления и получения самого комментария.

Почему же такие сложности? Да очень просто - любой спамер может вызвать эти функции, а такой протокол гарантирует что два домена обменяются данными: на каждом этапе будет резолвиться имя, а ведь нет гарантированного способа что ты это ты не прибегая к сертификатам и https. Решение должно работать на любом хостинге, в том числе и на бесплатном. Можно было бы обойтись без обратных вызовов, если использовать зарегистрированный логин и пароль на одной из сторон. Возможным бы решением этого мог бы быть рассмотренный мной openid, но вот возиться с ним не хочется - ведь мое решение будет работать без привлечения дополнительных сущностей. Использование openid значительно увеличивает цену разработки плагина: время и усилия по разбору документации по openid, тестирование, наличие ошибок в сторонних библиотеках и изучение этих библиотек, увеличение нагрузки на сервер (об этом явно написано в плагине openid для wordpress). Для установки плагина тогда потребуется таскать с собой библиотеку openid и следить за ее обновлениями. Когда как мое решение ничего подобного не требует и будет физически находится всего водном файле php. У кого есть какие соображения?

Здесь можно оставить свои комментарии. Выпуск опубликован при помощи плагина subscribe.ru and blogspot.com cross poster

Комментариев нет: