搜索机器人按我的按钮?我能阻止吗?



我有一个网站的内容,可以"喜欢"。不使用任何api,它是一个自定义的"喜欢"按钮,简单地增加"喜欢"的内容片段的统计。

现在,我有一个视图计数器,在每个页面加载,和一个喜欢按钮。按下点赞按钮后,该页面生命周期内任何连续点赞都会被禁用。

我遇到了一个问题,我喜欢的比我的意见多。这在理论上是不可能发生的。此后,我实现了一些java代码来解除按钮的连接(基本上隐藏元素),并且我还添加了一些服务器端代码,用于忽略java的机器人。

在服务器端按下按钮后,我设置了一个会话变量,如果为页面的该实例设置了该会话变量,则退出引发的任何连续事件。

当我快速点击按钮返回时,我已经将其减少到最多2或3个事件。只有在第2/3次运行有足够的时间来识别会话变量之后,事件代码才会被忽略。在使用会话变量技巧之前,您可以快速单击按钮10次,在页面最终返回并禁用按钮之前,它会增加10个赞。

所以,减少到2或3并不坏,但我一直得到更多的点赞比观看一些内容。

  • 我的视图计数良好,我仔细检查了一下。
  • 我的喜欢绝对只捕获第一个禁用/会话变量触发器/事件后几个不需要的事件火灾…(快速点击)
  • 我怀疑它的搜索引擎可能跟随链接…?

补充信息:jquery按钮禁用:

<script type ="text/javascript">
    function pageLoad() {
        $('#<%=vidUpB.ClientID%>').click(function () {
            $(this).css("display","none")
        });
    }
</script>

任何想法?

当bot发现POST请求到某个url时,它们喜欢发送GET请求到那里偷看。如果他们喜欢他们所看到的,链接可以被缓存,并且您可以不时地获得对该url的额外get请求。讨厌的机器人不遵循robots.txt,如何处理它们的唯一方法是在它们的方式中放置一些不引人注目的captcha -像要求像请求是POST请求,并检查隐藏的输入字段保持空。

<asp:TextBox ID="txtKeepEmpty" runat="server" style="display:none" />
<asp:Button runat="server" OnClick="btnLike_Click" Text="Like" />
protected void btnLike_Click(object sender, EventArgs e) {
  if (IsPostBack && 
    Request.HttpMethod == "POST" && 
    string.IsNullOrEmpty(txtKeepEmpty.Text)) {
    // update
  }
}

会话存储也是基于会话密钥的,会话密钥是一个cookie。每次用户删除会话cookie时,都会启动一个新的会话。当他永久禁用cookie时(一些用户正在这样做),它将为他发出的每个请求创建新会话。

尝试一下:

  1. 默认禁用HTML按钮。这将防止任何机器人按下它,如果他们只是抓取HTML。这样,如果他们没有解释Javascript,他们就不能按下按钮。
  2. 在Javascript页面加载过程中,启用该按钮。
  3. 当按钮被按下,让Javascript立即禁用它(本地)。这应该可以防止或至少减少连续多次点击它的可能性。
  4. 继续使用您的服务器代码过滤掉不必要的按钮按下通过其他方式。

最新更新