亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

在博客中屏蔽垃圾留言的簡(jiǎn)單方法

 更新時(shí)間:2015年08月01日 15:54:26   作者:libuchao  
這篇文章主要介紹了在博客中屏蔽垃圾留言的簡(jiǎn)單方法,作者以Ruby on Rails搭建的博客應(yīng)用為例,需要的朋友可以參考下

垃圾留言俗稱 Spam,就是到處在留言框里發(fā)垃圾廣告的那些,相信大多數(shù)人都見識(shí)過。以前使用 WordPress 的時(shí)候,因?yàn)檠b了防 Spam 的插件,可以屏蔽掉絕大多數(shù)的 Spam。但是自從上個(gè)月從 WordPress 遷移到新的博客平臺(tái)后,第一天上線就遭遇了幾個(gè)Spam,全都是國外的推廣的廣告什么的。博客的訪問量本身就很小,如果每天都來幾條 Spam,太煞風(fēng)景了,手工刪除也太浪費(fèi)時(shí)間,而且又是自己寫的小系統(tǒng),也不可能有什么插件可選,只能自己想辦法解決了。

看到有很多網(wǎng)站都是加個(gè)驗(yàn)證碼來解決這個(gè)問題的,因?yàn)?Spam 很難從圖片中識(shí)別出正確的驗(yàn)證碼,但是對(duì)于正常的留言者來說,又憑空多了一個(gè)步驟,那么除此之外還有什么方法能屏蔽這些 Spam 呢?

仔細(xì)分析一下,正常的留言應(yīng)該是人類通過瀏覽器提交數(shù)據(jù)到我們的服務(wù)器,而 Spam 通常都是由固定的程序在互聯(lián)網(wǎng)上掃描評(píng)論表單,偽造表單中的數(shù)據(jù),然后判斷表單的action,然后將數(shù)據(jù) POST 到這個(gè)action上來。也就是說,Spam 發(fā)送方都沒有正常地通過瀏覽器訪問過我們的表單頁面,也就是說,頁面上的 JavaScript 都沒有執(zhí)行過咯,明白這個(gè)特點(diǎn),那問題就迎刃而解了。

首先,我們可以在表單中放一個(gè)隱藏的文本框,這個(gè)文本框?qū)φS脩魜碚f是不可見的:

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

然后再寫一小段 JavaScript 代碼來改變這個(gè)文本框的值:

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

由于對(duì)于 Spam 發(fā)送者來說,這段 JavaScript 是沒有被執(zhí)行的,那么接下來要做的事情就是在服務(wù)端判斷這個(gè)隱藏文本框的值了,如果不是 JavaScript 所更改后的值,那么這條留言無疑就是 Spam 了(排除正常用戶的瀏覽器禁用 JavaScript 的情況)。

下面以 Ruby on Rails 應(yīng)用為例:

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

其實(shí),這個(gè)隱藏文本框的作用跟驗(yàn)證碼是一樣的,只不過這個(gè)驗(yàn)證碼是由 JavaScript 幫忙自動(dòng)輸入了。

用了這個(gè)方法至今一月有余,目前沒有再發(fā)生過 Spam 的情況。

相關(guān)文章

  • 在Ruby程序中連接數(shù)據(jù)庫的詳細(xì)教程

    在Ruby程序中連接數(shù)據(jù)庫的詳細(xì)教程

    這篇文章主要介紹了在Ruby程序中連接數(shù)據(jù)庫的詳細(xì)教程,包括介紹數(shù)據(jù)庫支持Ruby的接口等,是學(xué)習(xí)Ruby on Rails的基礎(chǔ),需要的朋友可以參考下
    2015-04-04
  • 最新的CocoaPods安裝教程

    最新的CocoaPods安裝教程

    寫一篇文章完整地記錄一下自己的CocoaPods安裝過程,并收集了一些安裝過程常見的錯(cuò)誤供大家參考。
    2017-12-12
  • 詳解Ruby中的instance_eval方法及其與class_eval的對(duì)比

    詳解Ruby中的instance_eval方法及其與class_eval的對(duì)比

    Ruby的eval族方法將字符串作為代碼來執(zhí)行,instance_eval方法便是其中之一,下面就來詳解Ruby中的instance_eval方法及其與class_eval的對(duì)比
    2016-05-05
  • Ruby多線程編程初步入門

    Ruby多線程編程初步入門

    這篇文章主要介紹了Ruby多線程編程初步入門,線程是Ruby編程學(xué)習(xí)當(dāng)中的重點(diǎn)和難點(diǎn),需要的朋友可以參考下
    2015-05-05
  • Ruby中調(diào)用執(zhí)行shell命令的6種方法

    Ruby中調(diào)用執(zhí)行shell命令的6種方法

    這篇文章主要介紹了Ruby中調(diào)用執(zhí)行shell命令的6種方法,本文羅列了Ruby中可以調(diào)用和執(zhí)行Linux系統(tǒng)Shell命令的6個(gè)方法,需要的朋友可以參考下
    2014-10-10
  • Ruby基礎(chǔ)知識(shí)之方法、代碼段

    Ruby基礎(chǔ)知識(shí)之方法、代碼段

    這篇文章主要介紹了Ruby基礎(chǔ)知識(shí)之方法、代碼段,本文講解了定義方法、取消方法、方法參數(shù)、代碼塊和閉包等知識(shí),需要的朋友可以參考下
    2015-04-04
  • mac os gem安裝json出現(xiàn)error failed的解決辦法

    mac os gem安裝json出現(xiàn)error failed的解決辦法

    這篇文章主要介紹了mac os gem安裝json出現(xiàn)error failed的解決辦法,系統(tǒng)是mac os Mavericks,失敗提示Failed to build gem native extension,需要的朋友可以參考下
    2014-06-06
  • CentOS7下搭建ruby on rails開發(fā)環(huán)境

    CentOS7下搭建ruby on rails開發(fā)環(huán)境

    聽說rails是一個(gè)比較流行的快速開發(fā)框架,對(duì)于我這個(gè)web不熟悉的人來說,那是極好的!可以快速上手,又能真正了解服務(wù)器端的各種,所以rails搞起來。不過一個(gè)完整的開發(fā)環(huán)境搭建過程完成后,真的只能用各種坑來形容~
    2016-02-02
  • ruby 學(xué)習(xí)筆記(2) 類的基本使用

    ruby 學(xué)習(xí)筆記(2) 類的基本使用

    ruby 學(xué)習(xí)筆記(2) 類的基本使用
    2010-02-02
  • Ruby中的反射(Reflection)應(yīng)用實(shí)例

    Ruby中的反射(Reflection)應(yīng)用實(shí)例

    這篇文章主要介紹了Ruby中的反射(Reflection)應(yīng)用實(shí)例,實(shí)現(xiàn)通過一個(gè)類名字符串構(gòu)造一個(gè)類對(duì)象和訪問成員變量和私有方法 ,需要的朋友可以參考下
    2014-06-06

最新評(píng)論