【问题标题】:Spam proof hit counter in DjangoDjango中的垃圾邮件证明命中计数器
【发布时间】:2010-11-15 19:14:19
【问题描述】:

我已经查看了最流行的 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(我无法增加自己的查看次数,但当我在另一个浏览器中访问该网站时它会增加。)

我觉得好处太多了,这种‘作弊’现在太容易了。

感谢大家的帮助!

【问题讨论】:

    标签: django spam-prevention hit-count


    【解决方案1】:

    记录 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
    

    【讨论】:

    • 我应该补充一点,您需要将缓存 TTL 设置为合理的值,例如一个小时:cache.set(ip, True, 60 * 60)
    • 谢谢...这比我认为我必须要做的大而慢的 db ip logging 更好更简单...我必须记住以后不要愚蠢;)
    【解决方案2】:

    没有万无一失的方法可以防止有人人为地夸大计数。相反,您愿意在多大程度上花时间让他们更难做到这一点:

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

    因此,最后,您只需要选择您想要达到的努力程度,以防止用户滥用系统。

    【讨论】:

    • 现在您可以使用 4 行 python 脚本来增加您的查看次数:(
    • 从 urllib 导入 urlopen;对于范围内的 x (100): urlopen('addressofpage.com')
    • 制作一个 2 行 python 脚本 :(
    【解决方案3】:

    您可以在他们访问时向他们发送一个 cookie,然后检查该 cookie。还是可以玩的,但是难度有点大。

    【讨论】:

      猜你喜欢
      • 2014-08-04
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2010-10-29
      • 2014-05-19
      • 2012-10-16
      • 1970-01-01
      • 2010-10-17
      相关资源
      最近更新 更多