我正在为网站创建一个论坛,并计划实施“报告此内容”功能。
老实说,我不确定该功能有多么有用(点亮必要),因为发布需要用户帐户(由admin创建),但解决方案让我感兴趣。
简而言之,就是这种情况:
对于所有用户,论坛上的所有(非限制)内容都将具有只读权限。对于未识别的用户,将有一个回复按钮并报告此内容按钮。前者将继续要求登录,而我曾计划后者不会,因此任何人都可以标记可疑或令人反感的内容。
我面临的问题基本上是“机器人点击”,或者更确切地说是如何实现系统,因此不会被“机器人点击”所迷惑。
有几种方法可以想到:
1)用户代理
2)在以任何方式作出反应之前需要几个标志(在预定义的时间跨度内?)
3)robots.txt
4)要求第二种形式的人为输入(验证码或“指定原因”)
我对他们的看法:
1)不可靠(作为唯一解决方案)
2)这需要大量用户,这可能导致事件永远不会被触发
3)这可能是“正确”的方式,但只适用于那些尊重它的人
4)嗯,我讨厌验证码,并且需要一个理由可能会提高标准以使函数保持有用
(高度开明的)社区有哪些方法可以与我分享?
答案 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"
。