Счетчик попаданий от спама в Джанго - PullRequest
3 голосов
/ 31 июля 2009

Я уже посмотрел самые популярные решения для счетчиков посещений 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 из-за того, что несколько пользователей искусственно завышают количество просмотров. Это не значит, что они плохие люди или даже плохие пользователи.

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

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

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

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

Ответы [ 3 ]

8 голосов
/ 31 июля 2009

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

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

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

8 голосов
/ 05 августа 2009

Регистрация 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
1 голос
/ 31 июля 2009

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

...