Как защитить голосование от подмены сессии?

Проблема:
Есть голосование, на странице рандомно появляется несколько вариантов ответа. В БД их очень много. Эти варианты постоянно меняются и у каждого есть свой идентификатор. В сессию записывается md5 хэш сформированный из зайди выведенных на страницу вариантов+соль. При отправке данных на сервер, скрипт получает все эти айди, формирует из них хэш и сверяет с записанным в сессию. Т.е. простая подмена айди при отправке данных на сервер не пройдет. Но, теоретически, злоумышленник может запомнит все айди из прошлого голосования, запомнить какой при них выдавался хэш и при следующем обновлении страницы, подменит все эти айди и подменить в сессии хэш, так что голосование снова пройдет проверку.

Вопрос:
Как от этого можно защититься? Авторизацию не предлагать, голосование открыто для всех. Думал дополнительную какую-инку в куки сохранять, но опять же, можно все подменить. Или может как-то динамический хэш сделать? Чтоб всегда разный получался? И как это лучше сделать? В общем, жду совета.

Заранее спасибо!
  • Вопрос задан
  • 2748 просмотров
Пригласить эксперта
Ответы на вопрос 4
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Через Flash-приложение формируете хэш (ваш ключ, сессия, IP, capabilites и прочее) и сверяете на сервере.
Декомпилировать можно, конечно, но уже меньше будет ложных срабатываний и "накруток" голосов.

злоумышленник может запомнит все айди из прошлого голосования
уникальный ID формируете и хеш для каждого голосования и нет проблем.
Экстра!: Блокировка голосовавших IP+DNS - должна помочь.
Ответ написан
Avillions
@Avillions
PHP Developer at Genesis
Хеш в сессии он никак не сможет подменить, максимум сменить id сессию на другого пользователя, просто сверяйте пришедшие к вам данные (сделайте уникальное имя в каждом чекбоксе) со страницы с теми которые хранятся в сессии (пусть даже те же уникальные имена или их хеш), если совпадают то записывайте результат, если нет то нет. Но всегда удаляйте данные из сессии после валидации.
Ответ написан
OlegLazarenko
@OlegLazarenko
подменит все эти айди и подменить в сессии хэш
Я верно понял, у вас в $_SESSION хэш? Как пользователь сможет его подменить?
Ответ написан
@shoomyst
dumb
Да ничто вам не поможет. Если кто-то захочет накрутить голосование, он это сделает, чтобы вы там не изобретали. Единственный более-менее вариант это привязка к IP, т.к. его теоретически сложнее всего менять, все остальные значения легко подделываются в запросах.
Просто посмотрите на все заголовки и параметры в запросе и подумайте, насколько легко менять тот или иной, чтобы пользователь выглядел как новый/старый
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы