Django的垃圾邮件打击计数器

Jia*_*aro 3 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)
Run Code Online (Sandbox Code Playgroud)

解决方案我可能会用

对我来说,当你需要在每个页面视图上对数据库进行一堆写操作时,这是一个相当粗糙的情况,但我想它无法帮助.由于一些用户人为地夸大了他们的观看次数,我将实施IP日志记录.并不是说他们是坏人,甚至是糟糕的用户.

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

值得一提的是,Stack Overflow似乎正在使用cookie(我无法增加自己的查看次数,但是当我在另一个浏览器中访问该站点时,它会增加.)

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

感谢大家的帮助!

RHS*_*ger 8

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

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

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


maz*_*ife 8

记录IP可能是最安全的.它并不完美,但它比cookie更好,对用户来说不像要求注册那么烦人.也就是说,我建议不要在数据库中保存它们.相反,使用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
Run Code Online (Sandbox Code Playgroud)

  • 我应该补充一点,你要将缓存TTL设置为合理的,比如一小时:cache.set(ip,True,60*60) (2认同)