0

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

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

简而言之,这就是场景:

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

因此,我面临的问题基本上是“机器人点击”,或者更确切地说是如何实现系统,以免被“机器人点击”愚弄。

想到了几个方法:

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

我对他们的看法:

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

(高度开明的)社区必须与我分享哪些方法?

4

3 回答 3

1

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

于 2010-02-01T13:09:08.007 回答
1

您错过了将链接设置为 nofollow 的链接,但我会选择要求人工输入(原因、投诉人的详细信息)来对抗机器人并要求一些标志来阻止人们只是标记他们不同意/不同意的人就像在论坛上一样。

于 2010-02-01T13:11:56.227 回答
1

您可以使用 javascript 将“report this”附加<form>到 DOM 中appendChild();

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

它还会阻止未运行 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<a href"">而是提交 a<form>并将其method参数设置为"post"

于 2010-02-01T13:28:10.047 回答