在博客中屏蔽垃圾留言的簡單方法
垃圾留言俗稱 Spam,就是到處在留言框里發(fā)垃圾廣告的那些,相信大多數(shù)人都見識過。以前使用 WordPress 的時(shí)候,因?yàn)檠b了防 Spam 的插件,可以屏蔽掉絕大多數(shù)的 Spam。但是自從上個(gè)月從 WordPress 遷移到新的博客平臺后,第一天上線就遭遇了幾個(gè)Spam,全都是國外的推廣的廣告什么的。博客的訪問量本身就很小,如果每天都來幾條 Spam,太煞風(fēng)景了,手工刪除也太浪費(fèi)時(shí)間,而且又是自己寫的小系統(tǒng),也不可能有什么插件可選,只能自己想辦法解決了。
看到有很多網(wǎng)站都是加個(gè)驗(yàn)證碼來解決這個(gè)問題的,因?yàn)?Spam 很難從圖片中識別出正確的驗(yàn)證碼,但是對于正常的留言者來說,又憑空多了一個(gè)步驟,那么除此之外還有什么方法能屏蔽這些 Spam 呢?
仔細(xì)分析一下,正常的留言應(yīng)該是人類通過瀏覽器提交數(shù)據(jù)到我們的服務(wù)器,而 Spam 通常都是由固定的程序在互聯(lián)網(wǎ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');
});
由于對于 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 幫忙自動輸入了。
用了這個(gè)方法至今一月有余,目前沒有再發(fā)生過 Spam 的情況。
相關(guān)文章
Ruby數(shù)組(Array)學(xué)習(xí)筆記
這篇文章主要介紹了Ruby數(shù)組(Array)學(xué)習(xí)筆記,本文講解了Ruby中數(shù)組的定義、數(shù)組元素的訪問、數(shù)組的操作、數(shù)組的運(yùn)算等內(nèi)容,需要的朋友可以參考下2014-11-11
Ruby中訪問SQL Server數(shù)據(jù)庫的配置實(shí)例
這篇文章主要介紹了Ruby中訪問SQL Server數(shù)據(jù)庫的配置實(shí)例,本文通過FreeTDS實(shí)現(xiàn),同時(shí)介紹了在ActiveRecord上使用Tiny_TDS的技巧,需要的朋友可以參考下2014-11-11
Ruby on Rails網(wǎng)站項(xiàng)目構(gòu)建簡單指南
Rails項(xiàng)目通過Ruby世界中的gem和rake工具來構(gòu)建起來真的相當(dāng)方便,這里就給大家整理了一份Ruby on Rails網(wǎng)站項(xiàng)目構(gòu)建簡單指南,需要的朋友可以參考下2016-06-06
Ruby使用設(shè)計(jì)模式中的代理模式與裝飾模式的代碼實(shí)例
這篇文章主要介紹了Ruby使用設(shè)計(jì)模式中的代理模式與裝飾模式的代碼實(shí)例,代理模式與裝飾模式都可以歸類為結(jié)構(gòu)型的設(shè)計(jì)模式,需要的朋友可以參考下2016-03-03
Ruby實(shí)現(xiàn)的一個(gè)強(qiáng)大的批量刪除文件腳本分享
這篇文章主要介紹了Ruby實(shí)現(xiàn)的一個(gè)強(qiáng)大的批量刪除文件腳本分享,本文腳本實(shí)現(xiàn)對指定目錄下的文件根據(jù)最后修改時(shí)間刪除文件,需要的朋友可以參考下2015-01-01
在Ruby程序中連接數(shù)據(jù)庫的詳細(xì)教程
這篇文章主要介紹了在Ruby程序中連接數(shù)據(jù)庫的詳細(xì)教程,包括介紹數(shù)據(jù)庫支持Ruby的接口等,是學(xué)習(xí)Ruby on Rails的基礎(chǔ),需要的朋友可以參考下2015-04-04
Rails應(yīng)用程序中同時(shí)修改操作沖突問題的解決方案
這篇文章主要介紹了Rails應(yīng)用程序中同時(shí)修改操作沖突問題的解決方案,本文講解使用Rails 的 樂觀鎖解決這個(gè)問題并給出了代碼救命,需要的朋友可以參考下2015-03-03
Ruby 中的 module_function 和 extend self異同
本文主要給大家介紹了在Ruby中 module_function 和 extend self的共同點(diǎn)和區(qū)別,非常的詳細(xì),也很實(shí)用,方便大家更好的理解的module_function 和 extend self2017-05-05

