Счетчик попаданий от спама в 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, когда они получат к нему доступ, а затем проверить его. В него все еще можно играть, но это немного сложнее.