实施“报告此内容”并检测垃圾邮件发送者或机器人触发的事件

时间:2010-02-01 13:05:40

标签: robots.txt spam-prevention

我正在为网站创建一个论坛,并计划实施“报告此内容”功能。

老实说,我不确定该功能有多么有用(点亮必要),因为发布需要用户帐户(由admin创建),但解决方案让我感兴趣。

简而言之,就是这种情况:

对于所有用户,论坛上的所有(非限制)内容都将具有只读权限。对于未识别的用户,将有一个回复按钮并报告此内容按钮。前者将继续要求登录,而我曾计划后者不会,因此任何人都可以标记可疑或令人反感的内容。

我面临的问题基本上是“机器人点击”,或者更确切地说是如何实现系统,因此不会被“机器人点击”所迷惑。

有几种方法可以想到:

1)用户代理
2)在以任何方式作出反应之前需要几个标志(在预定义的时间跨度内?) 3)robots.txt
4)要求第二种形式的人为输入(验证码或“指定原因”)

我对他们的看法:

1)不可靠(作为唯一解决方案)
2)这需要大量用户,这可能导致事件永远不会被触发 3)这可能是“正确”的方式,但只适用于那些尊重它的人 4)嗯,我讨厌验证码,并且需要一个理由可能会提高标准以使函数保持有用

(高度开明的)社区有哪些方法可以与我分享?

3 个答案:

答案 0 :(得分:1)

您只需重定向到用户需要输入报告内容的原因的表单。机器人可能不会在此输入任何内容,如果用户没有输入任何内容,则不会处理该表单。

答案 1 :(得分:1)

你错过了使链接成为一个nofollow链接,但我选择了一个组合,要求人工输入(理由,投诉人的详细信息)来反击机器人,并要求一些标志阻止人们只是标记他们不同意的人/不喜欢在论坛上。

答案 2 :(得分:1)

您可以使用javascript <form>将“报告此”appendChild();附加到DOM。

这可以防止大量垃圾邮件。

它还会阻止用户不运行javascript查看报告按钮。但由于这是一项不妨碍用户体验的功能,因此可能是一种可接受的选择。

window.onload = function() {
    var f = document.createElement('FORM');
        f.method = 'post';
        f.action = 'report.cgi';

    var b = document.createElement('INPUT');
        b.type = 'submit';
        b.value = 'Report this';


        f.appendChild(b);
        document.body.appendChild(f);
 }

注意:
rel="nofollow"属性确保搜索引擎不会“计算”链接,但是它们会遵循它(是的,名称暗示不同)。

如果您希望搜索引擎不要触摸某个文件,请使用robots.txt

注2:
报告某些内容是在服务器上“更改”某些内容的操作。因此,它不应该是GET请求而应该是POST请求。换句话说:不要使用<a href"">,而是提交<form>,其method参数设置为"post"