Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.141.165.180] |
|
Сообщ.
#1
,
|
|
|
приветствую!
к примеру, я для некоторого своего сервиса, хочу предоставить публичный АПИ. но важно то, чтоб этот АПИ не могли использовать вне браузера потому, что счетчики и реклама(за счет чего и живет сервис) перестанут работать. идея в том, что я на стороне сервиса буду проверять реферрала, и если он валидный - то АПИ работает. иначе отсылает. собственно вопрос в том, нормальный ли это способ, и есть ли возможность обойти такую проверку и самому каким-то образом устанавливать реферрала? ну, или, предлагайте идеи. благодарен. |
Сообщ.
#2
,
|
|
|
Конечно можно обойти. При HTTP запросе подставив валидный реферер "злоумышленник который не хочет смотреть рекламу" обойдет ограничения.
Вообще же создание API предполагает что там не будет никакой рекламы и клиент получит данные машинного вида для обработки и хранения. Если данные очень уж специфические и уникальные, лучшим вариантом будет работать по подписке, продавать доступ на время. Добавлено Этот вопрос уже обсуждался тут: RESTfull-api и счетчики, верно? Возможно стоит уточнить что за сервис и какие данные он предоставляет пользователям что бы разобраться в ситуации более точнее. |
Сообщ.
#3
,
|
|
|
Цитата Sunny @ Конечно можно обойти. При HTTP запросе подставив валидный реферер "злоумышленник который не хочет смотреть рекламу" обойдет ограничения. просто я далек от этого, и не очень понимаю, кто/как устанавливает реферрал. Цитата Sunny @ Этот вопрос уже обсуждался тут: RESTfull-api и счетчики, верно? да. Цитата Sunny @ стоит уточнить что за сервис и какие данные он предоставляет пользователям что бы разобраться в ситуации более точнее. этот сервис: http://liveworkspace.org/ хочу предоставить АПИ, для сайтов-партнеров. подскажите, как такое вообще делается? одно из условий - чтоб использовать этот АПИ можно было только из браузера. |
Сообщ.
#4
,
|
|
|
Цитата niXman @ просто я далек от этого, и не очень понимаю, кто/как устанавливает рефферал. Реферал это человек который подписался под другим (МММ, реферальная программа). HTTP реферер (Referrer в HTTP ответе сервера) - это строка которую отправляет браузер при запросе страницы, она указывает откуда пользователь пришел (предыдущий адрес). Прикреплённый файлsample.jpg (25,91 Кбайт, скачиваний: 450) Цитата niXman @ хочу предоставить АПИ, для сайтов-партнеров. подскажите, как такое вообще делается? Обычно через API обращаются к данным, а если необходимо эти данные создавать на сайтах-партнерах, то лучше использовать Iframe или JavaScript код для интеграции редактора в их сайт. При таких вариантах можно будет вставлять рекламу (в каком формате кстати, никаких баннеров не видно при отключенном adblock) и счетчики. Цитата Sunny @ JavaScript код для интеграции редактора в их сайт По такой технологии например работают многие like-кнопки (Facebook или Google+). VK.com использует Iframe для этих целей. |
Сообщ.
#5
,
|
|
|
Цитата Sunny @ HTTP реферер (Referrer в HTTP ответе сервера) - это строка которую отправляет браузер при запросе страницы, она указывает откуда пользователь пришел (предыдущий адрес). понял. т.е. при формировании запроса "руками", можно указать какой угодно реферрал. Sunny, смотрите, такая идея: партрнер, на своей стороне формирует УРЛ вида http://liveworkspace.org/выполнить_и_показ...т_кода_в_base64 тут, фрагмент_кода_в_base64 - это то, что я извлекаю на своей стороне и выполняю, и показываю результат. т.е. партнер формирует у себя на сайте нужные УРЛы, по которым кликают юзеры. возможно, это пояснение натолкнет Вас на какие-то мысли... |
Сообщ.
#6
,
|
|
|
Если от сервиса требуется только выполнение кода на разных языках, без редактора этого кода, можно использовать примерно такие реализации:
В обоих случаях пользователь который захочет протестировать код и получить результат с помощью вашего сайта отправляет запрос и получает результат с вашей рекламой.Вопрос в том, захочет ли владелец сайта показывать рекламу стороннего ресурса у себя на сайте. Либо же делать сервис по подписке - оплачивай и смотри без рекламы, или используй trial-версию с рекламой. Как я представляю себе эту систему: Цитата Заходим на сайт, вроде javascript.ru Видим код который хотим испробовать Жмем кнопку "Выполнить (Execute)" Открывается popup модальное окошко Крутится какой-нибудь ajax-загрузчик, мы ожидаем результат Получаем результат с рекламой (или без) сверху/снизу этого попапа Опять же владелец ресурса может свободно обрезать рекламу или подставлять свою собственную в ответ, это не сложно. Необходимо так же определиться с форматом рекламы который будет использоваться. Для hello world нет смысла впихивать баннеры с флеш-плеером 468*60 пикселей. |
Сообщ.
#7
,
|
|
|
Цитата Sunny @ Если от сервиса требуется только выполнение кода на разных языках, без редактора этого кода, можно использовать примерно такие реализации: Iframe для получения результата по ссылке POST ajax-запрос В обоих случаях пользователь который захочет протестировать код и получить результат с помощью вашего сайта отправляет запрос и получает результат с вашей рекламой. Вопрос в том, захочет ли владелец сайта показывать рекламу стороннего ресурса у себя на сайте. нет-нет-нет, Вы все не так поняли. партнер, сами коды хранит у себя и отображает их как ему угодно. но, помимо этого, он формирует ссылку, при клике на которую, юзер будет перенаправлен на liveworkspace.org. |
Сообщ.
#8
,
|
|
|
niXman можете привести пример такого партнера?
Например тот же Javascript.ru подойдет для этих целей? Не особо понимаю для чего партнеру уводить своих клиентов на другой сайт. |
Сообщ.
#9
,
|
|
|
Цитата Sunny @ можете привести пример такого партнера? я сейчас в процессе налаживания взаимодействия по просьбе первого партнера. сам сервис liveworkspace.org, не предусматривал публичного АПИ до тех пор, пока ни поступило предложение. и вот, мы пытаемся прийти к общему мнению о функциях АПИ. Цитата Sunny @ Например тот же Javascript.ru подойдет для этих целей? если там есть примеры кодов(а наверняка они там есть), то да, подходит. Цитата Sunny @ Не особо понимаю для чего партнеру уводить своих клиентов на другой сайт. это нужно не партнеру, это мое требование. а для партнера плюс в АПИ в том, что пользователи ресурса партнера получают профит в виде _однокликового_выполенения_кода_и_просмотра_результата_ |
Сообщ.
#10
,
|
|
|
Тогда как вы и сказали через base64 передавать по ссылке код и отображать всплывающее окно или сам сайт.
Еще стоит учесть тот факт, что различные браузеры поддерживают разную длину ссылок: http://paradigm.ru/url-max-length |
Сообщ.
#11
,
|
|
|
Цитата Sunny @ Тогда как вы и сказали через base64 передавать по ссылке код и отображать всплывающее окно или сам сайт. да, но исходный вопрос так и остался без ответа: что нужно сделать, чтоб этот АПИ могли использовать только партнеры? |
Сообщ.
#12
,
|
|
|
Использовать генерацию ключа доступа на стороне партнера или генерацию ссылки для просмотра после запроса сервера партнера.
Первый вариант немного проще, но не очень гибок. Второй более сложный, но крайне гибкий, который может генерировать короткие ссылки на присланный сервером код. В обоих вариантах требуется участие серверных скриптов. |
Сообщ.
#13
,
|
|
|
жуть как все сложно %)
Sunny, спасибо огромное. буду думать. |
Сообщ.
#14
,
|
|
|
niXman на самом деле не очень сложно, второй метод мне кажется более логичным и правильным.
Партнерский сервер отправляет код (он так же может включать IP адрес клиента) на ваш сервер, а в ответном сообщении получает ссылку для просмотра результатов. Тут можно и в фоне вычислять результат, считать клиентов, показывать рекламу и все остальное что вздумается. Помимо кода партнер может отправлять ссылку что бы клиент мог вернуться, вы же в свою очередь можете сделать более простой дизайн или как-то еще брендировать страницу. Что-то аж воображение разгулялось |
Сообщ.
#15
,
|
|
|
Цитата Sunny @ Партнерский сервер отправляет код (он так же может включать IP адрес клиента) на ваш сервер, а в ответном сообщении получает ссылку для просмотра результатов. т.е. при клике на ссылку у партнера, сервер партнера отправляет мне код для компиляции и я, в ответ, шлю ему ответ в виде ссылки на которую он переадресует юзера? тут, мне не очень понятно, как такое реализуется пошагово... не могли бы Вы описать плиз Цитата Sunny @ Помимо кода партнер может отправлять ссылку что бы клиент мог вернуться непонял.. поясните. Цитата Sunny @ вы же в свою очередь можете сделать более простой дизайн или как-то еще брендировать страницу. так же, поясните пожалуйста |
Сообщ.
#16
,
|
|
|
В операции участвуют трое:
Клиент - пользователь который хочет протестировать код Партнер - сайт вашего партнера куда заходит Клиент Сервис - сайт который воспроизводит код от Партнера Сервис определяет что пользователь перешел по ссылке с сайта определенного Партнера и может например менять изображение логотипа или оформлять сайт в цветовое оформление сайта Партнера и т.п. усложнение. Либо же можно не перенаправлять Клиента на ссылку которую создал Сервис, а просто открывать её во всплывающем окне которое Клиент безболезненно закроет. |
Сообщ.
#17
,
|
|
|
Sunny, да, все выглядит логично, но есть одно но: партнер не хочет вносить столь сильные изменения в свой сайт. но генерить УРЛы при помощи JS он согласен.
даже и не знаю... может быть отказаться от закрытого АПИ, и сделать его публичным? да, это не принесет прямой прибыли от рекламы, но это сделать рекламу сервису! т.е. своего рода косвенная реклама... |
Сообщ.
#18
,
|
|
|
Цитата niXman @ но генерить УРЛы при помощи JS он согласен В методе который я написал выше, партнеру ничего генерировать даже не придется. Он обращается по адресу на сервисе, получает ссылку и переадресует клиента на эту ссылку. Все решается максимум 2 десятками строчек на JavaScript, а на jQuery так вообще десятью, не более. Добавлено Цитата Sunny @ jQuery так вообще десятью $.ajax({ url: "http://liveworkspace.org/api/", dataType: "json", data: { referrer: document.location.toString(), code: $("#textarea").text() }, type: "POST" }).done(function(data){ document.location = data.link; }); Сервис получает код который необходимо исполнить (переменная code), ссылку для возврата (переменная referrer) и отдает сгенерированную ссылку для клиента. Все происходит на сайте партнера, при этом задействован сайт сервиса который при получении данных может начать их обрабатывать и подготавливать для клиента который придет как только получит ответ от сервиса (в виде ссылки на которую нужно придти). Можно конечно код шифровать в base64, это более простой способ, но имхо, код выше намного гибче, вы можете контролировать тех кто запрашивает ссылку на код с помощью access-control-allow-origin на стороне http сервера сервиса. |
Сообщ.
#19
,
|
|
|
Sunny, либо я придумал еще один способ защитить АПИ от использования нежелательными приложениями/сайтами, либо я придумал бред.
идея: 1. УРЛ должен быть таким: liveworkspace.org/api/<service_prefix>/<encoded_data> 2. где: service_prefix - префикс в виде имени сервиса-партнера, encoded_data - сам код и остальные данные энкодированные каким-то алгоритмом. в этом случае, каждому сервису-партнеру я выдаю ключ, с помощью которого он энкодирует данные. а я в тоже время, использую этот же ключ, для декодирования. таким образом, я смогу отсеивать все ненужные мне попытки использовать этот АПИ. как Вам такая идея? тут, осталось только определиться с алгоритмом. основные требования к которому: 1)реализация на php/js, 2)невысокая алгоритмическая сложность, 3)возможность точно определить, соответствуют ли полученные данные конкретному ключу. Добавлено для алгоритма подходит простой XOR, вот только с третьим пунктом лажа. да и подбором такой алгоритм с легкостью раскалывается =) |
Сообщ.
#20
,
|
|
|
Если шифрование происходит на стороне сервера по приватному ключу и передается публичный ключ (для идентификации партнера) + зашифрованные данные - может сработать.
А если использовать ключи на javascript, как их не шифруй, все равно найдут и смогут использовать сервис в своих корыстных целях. |
Сообщ.
#21
,
|
|
|
поясню.
я, заключая договор с партнером, передаю ему ключ, с помощью которого он шифрует данные. я же, на своей стороне, дешифрую его данные используя тот же ключ. вот только, я не уверен на счет того, каким образом партнер будет шифровать данные так, чтоб никто не смог украсть ключ. есть идеи? |
Сообщ.
#22
,
|
|
|
Цитата niXman @ каким образом партнер будет шифровать данные так, чтоб никто не смог украсть ключ Никто не сможет расшифровать данные кроме тех, кто знает ключ, если партнер будет это делать на стороне сервера с применением приватного и публичного ключа. |
Сообщ.
#23
,
|
|
|
ладно, осталось только согласовать с партнером...
|
Сообщ.
#24
,
|
|
|
для алгоритма шифрования, я пока что решил использовать RC4. благо есть реализация на JS: http://code.google.com/p/crypto-js/#RC4,_RC4Drop
|
Сообщ.
#25
,
|
|
|
да, на этом и сошлись.
тред, полагаю, можно закрывать. Sunny, спасибо еще раз, огромное! |