В настоящее время я пытаюсь создать страницу, на которой пользователи могут голосовать по содержанию ( вверх / вниз , подобно функции в сети StackExchange). Но пользователям не нужно регистрироваться, чтобы голосовать за контент. Так что это будет своего рода «анонимная» страница голосования . Он построен с помощью Laravel5 и использует базу данных MySQL для хранения голосов. Пользовательские сессии хранятся в плоских файлах, но могут также храниться в таблице базы данных (L5 здесь довольно гибкая).
Как сделать его безопасным? ,
Я сохраняю ограничения и уже проголосовавший контент в пользовательских сеансах, например, когда пользователь проголосовал за контент XYZ (так что пользователь не может проголосовать снова за конкретный контент на данный момент). Эти ограничения основаны на времени, в основном от 24 до 48 часов. Это хорошо работает, если пользователь не выбрасывает / удаляет свои файлы cookie , что приведет к созданию нового сеанса и устранению ограничений по времени, что может привести к легкому мошенничеству с голосованием .
Итак, как избежать того, что пользователь «теряет» свою сессию? Основное внимание уделяется тому, как можно ограничить ограничения и ограничения каждого «анонимного» пользователя! Общие ПК или голосование в разных местах нельзя избежать при анонимном анонимном голосовании, но при этом необходимо избегать «боттинга» или мошенничества с голосованием в большом количестве.
Установка sessionId каждого сеанса пользователя на комбинацию IP и User-Agent
Я задал вопрос об этой попытке (см. Ниже), но он откроет больше проблем, чем он разрешит (например, легкое слияние сеансов). Кроме того, я не мог установить для установки sessionID вручную, используя Laravel5.
так как пользователи не хранятся и сохраняются очень сложно и не могут быть сделаны на 100% уверенными.
как я пытаюсь достичь этого наиболее близко, это использовать ip-адрес запроса и токен csrf. вы можете получить ip-адрес из запроса и csrf_token()
из любого места в вашем приложении laravel.
вот пример того, как я собираюсь реализовать
создать таблицу с именами, имеющими следующие поля
я бы проверял, нет ли у клиента существующей записи для того же типа и идентификатора. Клиент – это csrf_token. ip является гарантией того, являются ли запросы законными.
проголосоваемым типом и идентификатором является полиморфная связь между либо может быть комментариями, сообщениями и т. д.
заметка
без постоянной идентификации пользователя, в любом случае некоторые пользователи могут не голосовать, а некоторые могут голосовать дважды. это невозможно сделать отлично.
- некоторые пользователи могут несколько раз проголосовать за разные пользовательские агенты.
- некоторые пользователи могут обманывать ip. очистить куки
- разные пользователи могут использовать одну и ту же систему для входа в систему.
- некоторые пользователи могут использовать разные подключения или системные логины.
так что либо мы берем любую информацию, это не будет на 100% точным.
Моим решением была комбинация внедрения evercookie для назначения «Идентификационного Cookie» для каждого пользователя, обнаружения доступа к конфиденциальности и ограничения доступа при включении режима инкогнито или частного просмотра и, наконец, ограничения нескольких действий (голосование в моем случае), когда у вас не было evercookie.