На сайте у каждого пользователя , на его странице, есть кнопка like от фейсбука.
Когда кто то ставит лайк, то отправляется запрос на сервер где в базе повышается счетчик, мол такому то пользователю добавили лайк.
Вот тут и есть один нюанс, что если посмотреть на какой url javascript отправляет запросы, то можно вручную тот url запрашивать и таким образом накручивать счетчик.
Как можно отсечь левые запросы, то есть что бы быть уверенным что запрос приходит именно от JS а не вручную пользователем запрашивается ?
Спустя 2 минуты, 56 секунд (7.03.2012 - 13:18) Visman написал(а):
Цитата (walik @ 7.03.2012 - 18:15) |
то есть что бы быть уверенным что запрос приходит именно от JS а не вручную пользователем запрашивается ? |
А зачем?
Если нормально делать, то создается отделная таблица в которой хранится информация по лайкам (кто, кому, за что).
Пришел новый лайк, сверяй с таблицей на нужных условиях.
И не надо ни какой проверки на отправку от яваскрипт.
Спустя 6 минут, 56 секунд (7.03.2012 - 13:25) walik написал(а):
Ставить лайк может любой пользователь (и Гости тоже), понятное дело главное что бы он был авторизован в фейсбуке.
Поэтому идентифицировать пользователя нет возможности (FB не дает никакой информации о пользователе который ставит лайк).
И соответственно мы имеем только инфу о том, кому поставили лайк (или на чей странице был поставлен лайк).
Запросы отправляются по событию (Facebook дает два события когда происходит like и dislike. И по каждому из них надо повышать счетчик или понижать соответственно)
Поэтому идентифицировать пользователя нет возможности (FB не дает никакой информации о пользователе который ставит лайк).
И соответственно мы имеем только инфу о том, кому поставили лайк (или на чей странице был поставлен лайк).
Запросы отправляются по событию (Facebook дает два события когда происходит like и dislike. И по каждому из них надо повышать счетчик или понижать соответственно)
Спустя 11 минут, 14 секунд (7.03.2012 - 13:36) Invis1ble написал(а):
ну так изменяй значение по событиям, а защита от накруток - это уже дело разработчиков фейсбука, имхо
события ведь от фейсбука вызываются?
события ведь от фейсбука вызываются?
Спустя 8 минут, 34 секунды (7.03.2012 - 13:45) walik написал(а):
Блин да не в фейсбуке дело))))
Имеется страница:
/users/222
где 222 - id пользователя на сайте.
На этой странице есть кнопка лайк (от фейсбука). Когда кто то делает лайк запускается функция, которая отправляет AJAX запрос по адресу типа:
/counter?id=222&action=increment
Там уже запрос обрабатывается и и в зависимости от GET параметра "action" счетчик повышается или понижается для пользователя с id указаным в GET параметрах.
Так вот и если я как обычный пользователь узнаю url куда отправляются запросы (/counter?id=222&action=increment), то смогу запросто себе либо накручивать либо кому то понижать счетчик.
Для большей ясности объясню суть:
Надо раскрутить сайт фейсбуке, и поэтому у каждого пользователя есть своя страница, куда он может звать знакомых что бы те ставили лайки, и если пользователь набирает определенное кол-во лайков, то он получает вознаграждение.
Имеется страница:
/users/222
где 222 - id пользователя на сайте.
На этой странице есть кнопка лайк (от фейсбука). Когда кто то делает лайк запускается функция, которая отправляет AJAX запрос по адресу типа:
/counter?id=222&action=increment
Там уже запрос обрабатывается и и в зависимости от GET параметра "action" счетчик повышается или понижается для пользователя с id указаным в GET параметрах.
Так вот и если я как обычный пользователь узнаю url куда отправляются запросы (/counter?id=222&action=increment), то смогу запросто себе либо накручивать либо кому то понижать счетчик.
Для большей ясности объясню суть:
Надо раскрутить сайт фейсбуке, и поэтому у каждого пользователя есть своя страница, куда он может звать знакомых что бы те ставили лайки, и если пользователь набирает определенное кол-во лайков, то он получает вознаграждение.
Спустя 4 минуты, 36 секунд (7.03.2012 - 13:50) Invis1ble написал(а):
можно генерировать уникальный хеш для каждого юзера и писать ему в куки, если поступает запрос на сервер для ин/декремента счетчика - сверять хеш в куках с ранее сгенерированным. Как-то так.
Спустя 5 минут, 10 секунд (7.03.2012 - 13:55) walik написал(а):
Я примерно так и надумал, но подумал мало ли есть какие либо более хитроумные варианты
Спустя 4 минуты, 14 секунд (7.03.2012 - 13:59) Visman написал(а):
Куки легко стираются или даже не устанавливаются, если скриптик на накручивание написать криво
Спустя 12 секунд (7.03.2012 - 13:59) alexbel2404 написал(а):
полностью защититься нереально наверно)
Спустя 3 минуты, 43 секунды (7.03.2012 - 14:03) Invis1ble написал(а):
более надежный алгоритм (в плане защиты от накруток) врядли можно придумать...
насчет повышения устойчивости - можно дублировать ключи в локальном хранилище, к примеру
насчет повышения устойчивости - можно дублировать ключи в локальном хранилище, к примеру
Спустя 6 минут, 36 секунд (7.03.2012 - 14:10) walik написал(а):
Я ситуацию вижу так, при обращение к странице /users/222 в сессию записывается какой либо ключ-хэш.
В JS при отправке запроса, отправлять этот самый ключ.
А на сервере уже при обращение к странице /counter?id=222&action=increment проверять полученный ключ с тем что в сессии.
Таким образом для накрутки нужно будет постоянно знать какой ключ.
Таким образом можно отсечь простые запросы.
А для накрутке уже скорее понадобится прога которая будет в начале парсить страницу что бы получить ключ, а потом уже с ключем отправлять запрос
В JS при отправке запроса, отправлять этот самый ключ.
А на сервере уже при обращение к странице /counter?id=222&action=increment проверять полученный ключ с тем что в сессии.
Таким образом для накрутки нужно будет постоянно знать какой ключ.
Таким образом можно отсечь простые запросы.
А для накрутке уже скорее понадобится прога которая будет в начале парсить страницу что бы получить ключ, а потом уже с ключем отправлять запрос
Спустя 1 час, 24 минуты, 43 секунды (7.03.2012 - 15:34) walters написал(а):
walik
слишком далеко зашел...
слишком далеко зашел...
Спустя 1 час, 12 минут, 57 секунд (7.03.2012 - 16:47) walik написал(а):
В смысле ?