Nano Hash - криптовалюты, майнинг, программирование

Стратегия уникального голосования пользователей, такая как Stackoverflow?

Я заметил, что для голосования SO реализует метод XHR, который отправляет POST в контроллер сообщений и отправляет идентификатор сообщения и тип голосования через URL-адрес, кроме того, отправляется параметр fkey, например:

http://stackoverflow.com/posts/1/vote/2

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

Схема таблицы, которую я буду хранить:

thread_id   user_id   vote_type
2334        1         2

Пока что я придумал следующие пункты:

  • убедитесь, что пользователь вошел в систему
  • убедитесь, что отправлены действительный идентификатор сообщения и действительный тип голосования
  • убедитесь, что после POSTing пользователь ранее не голосовал
  • код, который создает хэш, не может содержать динамическую информацию, такую ​​как пользовательский агент, поскольку пользователь может быть в другом браузере, в другой ОС, верно?

Обновление:

«SO, вероятно, использует cookie для входа в систему для идентификации пользователя». - Андрей

Может ли кто-нибудь продемонстрировать, как это будет сделано, или, другими словами, более конкретно предоставить пример того, как создается fkey, представляющая собой буквенно-цифровую 32-битную строку?

Вопрос:

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

Буду признателен за любые советы или идеи для любого, кто реализовал подобную технику.


  • Почему вы никуда не отправляете фактический идентификатор пользователя вместе со своим кодом XHR? 12.01.2010
  • ну, я заметил, что SO не использовал его, и, возможно, по уважительной причине ... можно было создать настраиваемую форму, поместить поле идентификатора пользователя со значением и отправить его по почте, и это был бы действительный запрос, нет? Однако, если вы используете что-то вроде fkey, скорее всего, никто не сможет его запрограммировать обратным образом, чтобы получить тот же хеш на основе пользователя, поэтому я думаю, что SO использует этот метод. 12.01.2010
  • SO, вероятно, использует файл cookie для входа в систему для идентификации пользователя. Я проверил с помощью Firebug, файлы cookie отправляются. 12.01.2010
  • Разве эта логика частично не реализована в вашей базе данных. 1 пост много разных голосов? Если идентификатор пользователя находится в таблице голосования для этого сообщения, не разрешайте дополнительные голоса. Если проголосовали против, удалите запись из таблицы голосования. 12.01.2010
  • Для идиотов вроде меня: XHR = XHMLHttpRequest 12.01.2010
  • @ Андрей, вы можете продемонстрировать пример того, как они это делают? 12.01.2010

Ответы:


1

создайте УНИКАЛЬНЫЙ индекс для полей (thread_id, user_id), и DBengine защитит вас от множества комментариев в одном потоке :)

12.01.2010

2

Вы можете просто как-то подписать URI, чтобы пользователи не могли манипулировать значением. Например, вы можете хешировать части URI с секретом и добавлять хеш к URI. Когда пользователи копируют URI и изменяют значения, URI и подписанная часть становятся недействительными.

Это часто делается в RESTful API, и ваш текущий подход аналогичен.

11.01.2010

3

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

  • проверьте их UID - или сгенерированный ID из UID (я объясню)
  • запишите их IP-адрес и проверьте в базе данных IP-адрес и идентификатор представления (вместе с сгенерированным UID)

Используя только IP-решение, можно, конечно, победить прокси-сервер или соединение, которое часто меняет IP, например, оператор DSL в моем городе (но даже в этом случае каждые пару дней). Я лично генерирую уникальный ключ на основе UID этого человека и передаю его обратно и четвертый, если необходимо. Соленый хеш MD5 обычно работает нормально, или даже реализация AES, если MD5 рассматривается как слишком слабый. В совокупности у вас должно получиться хорошее стартовое место.

11.01.2010
  • Можете ли вы включить в этот контекст примеры md5 плюс соль вместе с идентификатором пользователя? 12.01.2010
  • $ new_uid = MD5 ($ user_name. это моя соль); с помощью $ new_uid вы можете сохранить это значение в базе данных, которая будет уникальной для каждого члена. Конечно, я предполагаю, что у каждого участника уже есть уникальный идентификатор, такой как адрес электронной почты, на котором он основан (для $ user_name). Затем вы можете выполнить запрос по их ip - $ ip = $ _SERVER ['REMOTE_ADDR']; и уникальный идентификатор, сгенерированный с помощью соленого хеша MD5. Это не идеально, но это основа для работы. 12.01.2010
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

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

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..