[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасные запросы
walik
Здравствуйте,
На сайте у каждого пользователя , на его странице, есть кнопка 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. И по каждому из них надо повышать счетчик или понижать соответственно)

Спустя 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), то смогу запросто себе либо накручивать либо кому то понижать счетчик.


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

Спустя 4 минуты, 36 секунд (7.03.2012 - 13:50) Invis1ble написал(а):
можно генерировать уникальный хеш для каждого юзера и писать ему в куки, если поступает запрос на сервер для ин/декремента счетчика - сверять хеш в куках с ранее сгенерированным. Как-то так.

Спустя 5 минут, 10 секунд (7.03.2012 - 13:55) walik написал(а):
Я примерно так и надумал, но подумал мало ли есть какие либо более хитроумные варианты smile.gif

Спустя 4 минуты, 14 секунд (7.03.2012 - 13:59) Visman написал(а):
Куки легко стираются или даже не устанавливаются, если скриптик на накручивание написать криво biggrin.gif

Спустя 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 проверять полученный ключ с тем что в сессии.

Таким образом для накрутки нужно будет постоянно знать какой ключ.
Таким образом можно отсечь простые запросы.
А для накрутке уже скорее понадобится прога которая будет в начале парсить страницу что бы получить ключ, а потом уже с ключем отправлять запрос smile.gif

Спустя 1 час, 24 минуты, 43 секунды (7.03.2012 - 15:34) walters написал(а):
walik
слишком далеко зашел...

Спустя 1 час, 12 минут, 57 секунд (7.03.2012 - 16:47) walik написал(а):
В смысле ?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.