Как избежать того, что пользователь удаляет сеанс

Вариант использования

В настоящее время я пытаюсь создать страницу, на которой пользователи могут голосовать по содержанию ( вверх / вниз , подобно функции в сети StackExchange). Но пользователям не нужно регистрироваться, чтобы голосовать за контент. Так что это будет своего рода «анонимная» страница голосования . Он построен с помощью Laravel5 и использует базу данных MySQL для хранения голосов. Пользовательские сессии хранятся в плоских файлах, но могут также храниться в таблице базы данных (L5 здесь довольно гибкая).


Проблема

Как сделать его безопасным? ,

Я сохраняю ограничения и уже проголосовавший контент в пользовательских сеансах, например, когда пользователь проголосовал за контент XYZ (так что пользователь не может проголосовать снова за конкретный контент на данный момент). Эти ограничения основаны на времени, в основном от 24 до 48 часов. Это хорошо работает, если пользователь не выбрасывает / удаляет свои файлы cookie , что приведет к созданию нового сеанса и устранению ограничений по времени, что может привести к легкому мошенничеству с голосованием .

Итак, как избежать того, что пользователь «теряет» свою сессию? Основное внимание уделяется тому, как можно ограничить ограничения и ограничения каждого «анонимного» пользователя! Общие ПК или голосование в разных местах нельзя избежать при анонимном анонимном голосовании, но при этом необходимо избегать «боттинга» или мошенничества с голосованием в большом количестве.


Решение

Установка sessionId каждого сеанса пользователя на комбинацию IP и User-Agent

Я задал вопрос об этой попытке (см. Ниже), но он откроет больше проблем, чем он разрешит (например, легкое слияние сеансов). Кроме того, я не мог установить для установки sessionID вручную, используя Laravel5.


Решения, которые не подходят

  • Пусть каждый пользователь регистрирует себя (это просто слишком много усилий для каждого пользователя в моем случае использования)

Связанный

  • Как запомнить анонимное голосование
  • Получить или переназначить сеанс пользователя из ip и user-agent

так как пользователи не хранятся и сохраняются очень сложно и не могут быть сделаны на 100% уверенными.

как я пытаюсь достичь этого наиболее близко, это использовать ip-адрес запроса и токен csrf. вы можете получить ip-адрес из запроса и csrf_token() из любого места в вашем приложении laravel.

вот пример того, как я собираюсь реализовать

создать таблицу с именами, имеющими следующие поля

  • votable_type
  • votable_id
  • айпи адрес
  • csrf_token

я бы проверял, нет ли у клиента существующей записи для того же типа и идентификатора. Клиент – это csrf_token. ip является гарантией того, являются ли запросы законными.

проголосоваемым типом и идентификатором является полиморфная связь между либо может быть комментариями, сообщениями и т. д.

заметка

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

  • некоторые пользователи могут несколько раз проголосовать за разные пользовательские агенты.
  • некоторые пользователи могут обманывать ip. очистить куки
  • разные пользователи могут использовать одну и ту же систему для входа в систему.
  • некоторые пользователи могут использовать разные подключения или системные логины.

так что либо мы берем любую информацию, это не будет на 100% точным.

Моим решением была комбинация внедрения evercookie для назначения «Идентификационного Cookie» для каждого пользователя, обнаружения доступа к конфиденциальности и ограничения доступа при включении режима инкогнито или частного просмотра и, наконец, ограничения нескольких действий (голосование в моем случае), когда у вас не было evercookie.