在博客中屏蔽垃圾留言的简单方法

 更新时间:2015年08月01日 15:54:26   作者:libuchao  
这篇文章主要介绍了在博客中屏蔽垃圾留言的简单方法,作者以Ruby on Rails搭建的博客应用为例,需要的朋友可以参考下

垃圾留言俗称 Spam,就是到处在留言框里发垃圾广告的那些,相信大多数人都见识过。以前使用 WordPress 的时候,因为装了防 Spam 的插件,可以屏蔽掉绝大多数的 Spam。但是自从上个月从 WordPress 迁移到新的博客平台后,第一天上线就遭遇了几个Spam,全都是国外的推广的广告什么的。博客的访问量本身就很小,如果每天都来几条 Spam,太煞风景了,手工删除也太浪费时间,而且又是自己写的小系统,也不可能有什么插件可选,只能自己想办法解决了。

看到有很多网站都是加个验证码来解决这个问题的,因为 Spam 很难从图片中识别出正确的验证码,但是对于正常的留言者来说,又凭空多了一个步骤,那么除此之外还有什么方法能屏蔽这些 Spam 呢?

仔细分析一下,正常的留言应该是人类通过浏览器提交数据到我们的服务器,而 Spam 通常都是由固定的程序在互联网上扫描评论表单,伪造表单中的数据,然后判断表单的action,然后将数据 POST 到这个action上来。也就是说,Spam 发送方都没有正常地通过浏览器访问过我们的表单页面,也就是说,页面上的 JavaScript 都没有执行过咯,明白这个特点,那问题就迎刃而解了。

首先,我们可以在表单中放一个隐藏的文本框,这个文本框对正常用户来说是不可见的:

<div style="margin:0;padding:0;display:inline">
  <input id="checkspam" name="checkspam" type="hidden" value="Hello Ruby" />
</div>

然后再写一小段 JavaScript 代码来改变这个文本框的值:

jQuery(document).ready(function($) {
  $("#checkspam").val('abcdefg');
});

由于对于 Spam 发送者来说,这段 JavaScript 是没有被执行的,那么接下来要做的事情就是在服务端判断这个隐藏文本框的值了,如果不是 JavaScript 所更改后的值,那么这条留言无疑就是 Spam 了(排除正常用户的浏览器禁用 JavaScript 的情况)。

下面以 Ruby on Rails 应用为例:

if params[:checkspam] == "abcdefg"
 @comment.save
else
 # It's a spam...
end

其实,这个隐藏文本框的作用跟验证码是一样的,只不过这个验证码是由 JavaScript 帮忙自动输入了。

用了这个方法至今一月有余,目前没有再发生过 Spam 的情况。

相关文章

  • 在Ruby程序中连接数据库的详细教程

    在Ruby程序中连接数据库的详细教程

    这篇文章主要介绍了在Ruby程序中连接数据库的详细教程,包括介绍数据库支持Ruby的接口等,是学习Ruby on Rails的基础,需要的朋友可以参考下
    2015-04-04
  • 最新的CocoaPods安装教程

    最新的CocoaPods安装教程

    写一篇文章完整地记录一下自己的CocoaPods安装过程,并收集了一些安装过程常见的错误供大家参考。
    2017-12-12
  • 详解Ruby中的instance_eval方法及其与class_eval的对比

    详解Ruby中的instance_eval方法及其与class_eval的对比

    Ruby的eval族方法将字符串作为代码来执行,instance_eval方法便是其中之一,下面就来详解Ruby中的instance_eval方法及其与class_eval的对比
    2016-05-05
  • Ruby多线程编程初步入门

    Ruby多线程编程初步入门

    这篇文章主要介绍了Ruby多线程编程初步入门,线程是Ruby编程学习当中的重点和难点,需要的朋友可以参考下
    2015-05-05
  • Ruby中调用执行shell命令的6种方法

    Ruby中调用执行shell命令的6种方法

    这篇文章主要介绍了Ruby中调用执行shell命令的6种方法,本文罗列了Ruby中可以调用和执行Linux系统Shell命令的6个方法,需要的朋友可以参考下
    2014-10-10
  • Ruby基础知识之方法、代码段

    Ruby基础知识之方法、代码段

    这篇文章主要介绍了Ruby基础知识之方法、代码段,本文讲解了定义方法、取消方法、方法参数、代码块和闭包等知识,需要的朋友可以参考下
    2015-04-04
  • mac os gem安装json出现error failed的解决办法

    mac os gem安装json出现error failed的解决办法

    这篇文章主要介绍了mac os gem安装json出现error failed的解决办法,系统是mac os Mavericks,失败提示Failed to build gem native extension,需要的朋友可以参考下
    2014-06-06
  • CentOS7下搭建ruby on rails开发环境

    CentOS7下搭建ruby on rails开发环境

    听说rails是一个比较流行的快速开发框架,对于我这个web不熟悉的人来说,那是极好的!可以快速上手,又能真正了解服务器端的各种,所以rails搞起来。不过一个完整的开发环境搭建过程完成后,真的只能用各种坑来形容~
    2016-02-02
  • ruby 学习笔记(2) 类的基本使用

    ruby 学习笔记(2) 类的基本使用

    ruby 学习笔记(2) 类的基本使用
    2010-02-02
  • Ruby中的反射(Reflection)应用实例

    Ruby中的反射(Reflection)应用实例

    这篇文章主要介绍了Ruby中的反射(Reflection)应用实例,实现通过一个类名字符串构造一个类对象和访问成员变量和私有方法 ,需要的朋友可以参考下
    2014-06-06

最新评论