Счетчик попаданий от спама в Django

Я уже рассмотрел наиболее популярные решения для счетчиков посещений Django, и ни одно из них, похоже, не решает проблему спама в кнопке обновления.

Действительно ли мне нужно регистрировать IP- адреса каждого посетителя, чтобы не дать им искусственно увеличить количество просмотров страниц, спамом кнопку обновления (или написание быстрого и грязного сценария для этого)?

Дополнительная информация

Так что прямо сейчас вы можете увеличить количество просмотров с помощью следующих нескольких строк кода Python. А это так мало, что вам не нужно писать скрипт, вы можете просто напечатать его в интерактивном сеансе:

from urllib import urlopen

num_of_times_to_hit_page = 100
url_of_the_page = "http://example.com"

for x in range(num_of_times_to_hit_page):
    urlopen(url_of_the_page)

Решение, которое я, вероятно, буду использовать

Для меня это довольно грубая ситуация, когда вам нужно сделать кучу записей в базу данных при КАЖДОМ просмотре страницы, но, думаю, ничего не поделаешь. Я собираюсь внедрить протоколирование IP из-за того, что несколько пользователей искусственно завышают количество просмотров. Дело не в том, что они плохие люди или даже плохие пользователи.

Посмотрите ответ о решении проблемы с кэшированием... Я собираюсь сначала пройти этот путь. Буду обновлять с результатами.

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

Я думаю, что выгода слишком велика, и такого рода "мошенничество" сейчас слишком просто.

Спасибо всем за помощь!

3 ответа

Решение

Регистрация IP, вероятно, самая безопасная. Это не идеально, но это лучше, чем куки и меньше раздражает пользователей, чем требует регистрации. Тем не менее, я бы рекомендовал не беспокоиться о сохранении их в БД. Вместо этого используйте низкоуровневую инфраструктуру кэширования Django. Ключом будет IP и значение простого логического значения. Даже файловый кеш должен быть довольно быстрым, хотя если вы действительно ожидаете большой трафик, используйте memchached в качестве бэкэнда кеша.

Примерно так должно работать:

ip = request.META['REMOTE_ADDR']
has_voted = cache.get(ip)
if not has_voted:
    cache.set(ip, True)
    #code to save vote goes here

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

  • Совсем нет (они нажимают кнопку обновления)
  • Установите куки, проверьте куки, чтобы увидеть, если они уже были там (они очищают куки)
  • Записывать IP-адреса (каждый раз подделывать разные IP)
  • Требовать входа с электронной почтой, от которой они отвечают (они регистрируются для нескольких учетных записей электронной почты)

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

Вы можете отправить им файл cookie, когда они получат к нему доступ, а затем проверить его. В него все еще можно играть, но это немного сложнее.

Другие вопросы по тегам