Django中的垃圾邮件打击计数器

时间:2009-07-31 13:33:18

标签: django spam-prevention hit-count

我已经看过最受欢迎的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日志记录。并不是说他们是坏人,甚至是糟糕的用户。

请参阅有关缓存解决问题的答案......我将首先尝试这条路线。将更新结果。

对于它的价值,Stack Overflow似乎正在使用cookie(我无法增加自己的视图数量,但是当我在另一个浏览器中访问该网站时,它会增加。)

我认为这样做的好处太多了,这种“作弊”现在太容易了。

感谢大家的帮助!

3 个答案:

答案 0 :(得分:8)

没有万无一失的方法可以防止某人人为地夸大计数。相反,你愿意花多少时间让他们更难以这样做:

  • 完全没有(他们点击刷新按钮)
  • 设置一个cookie,检查cookie以查看它们是否已经存在(它们清除了cookie)
  • 记录IP地址(每次假冒不同的IP)
  • 要求使用他们回复的电子邮件登录(他们注册多个电子邮件帐户)

因此,最后,您只需要选择您想要的工作量,以防止用户滥用系统。

答案 1 :(得分:8)

记录IP可能是最安全的。它并不完美,但它比cookie更好,对用户来说不像要求注册那么烦人。也就是说,我建议不要在数据库中保存它们。相反,使用Django的low-level caching framework。关键是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

答案 2 :(得分:1)

您可以在访问时向他们发送Cookie,然后检查该Cookie。它仍然可以被游戏,但它有点难。