如何在 WordPress 回覆訊息中新增驗證碼功能 CAPTCHA

自從架了這個站之後,發現滿多人很無聊地利用回覆功能來傳送垃圾消息,真是不堪其擾,所以打算用驗證碼 CAPTCHA 來阻擋一些垃圾回覆。

CAPTCHA,全文是Completely Automated Public Turing test to tell Computers and Humans Apart,是一種區分使用者是電腦和人的公共全自動程式。在CAPTCHA測試中,作為伺服器的電腦會自動生成一個問題由使用者來解答。這個問題可以由電腦生成並評判,但是必須只有人類才能解答。由於電腦無法解答CAPTCHA的問題,所以回答出問題的使用者就可以被認為是人類。

在WordPress增加這個功能並不難,但前提是你必須有一個 gmail 帳號來申請 Google recaptcha 的API,然後才能有一組公鑰和私鑰。

首先登入 WordPress 管理者介面,在控制台->外掛->安裝外掛下搜尋 “WP-reCaptcha“外掛,然後安裝它,目前版本是 3.2。過程沒有什麼困難可言。

之後用電腦瀏覽器造訪 Google reCaptcha 網站申請一組 API,給你自己的網站使用。按下網頁右上角的 “Get reCaptcha“按鈕,出現下面網頁,按下 “Sign Up Now!” 按鈕。

1

 

然後在下面網頁裡面,輸入自己的網站名稱

2

然後在網頁左方 “My Account” 裡面找到你剛剛申請的網站名稱,擷取 Public Key (公鑰)和Private Key(私鑰)這兩組文字。

3

然後回到 WordPress 外掛管理者介面設定 WP-reCAPTCHA 頁面,貼上剛剛從 Google 得到的公鑰和私鑰兩組文字。

4

然後在這個設定網頁下方的 General Options 裡面按下 “Save reCAPTCHA Settings” 套用即可。

5

之後回覆留言就必須輸入驗證碼了,希望能過濾掉一些垃圾訊息。

6

CubieTruck OpenSSL Heart Bleed Fix

2014/4/8,全世界IT界都被來自OpenSSL項目的針對名為「心臟流血」(Heartbleed)的開源漏洞的緊急警告震醒,該漏洞可被用於從任何使用OpenSSL協議的軟件的服務器上獲取服務器工作日誌,如果不安裝緊急軟件包對該漏洞進行修復,世界範圍內數千萬計的服務器都處於危險之中。

OpenSSL Heart Bleed,光聽名字就很可怕,心臟淌血了。的確,在OpenSSL溝通中,會無意的記憶體洩漏,裡面可能包含了一些重要的資訊,這個漏洞使攻擊者能夠從記憶體中讀取最多64 KB的數據。一些安全研究員表示:無需任何特權信息或身份驗證,別人就可以從我們自己的網站偷來X.509證書的私鑰、用戶名與密碼、聊天工具的消息、電子郵件以及重要的商業文檔和通信等數據。所以這是一個很嚴重的資安問題。我想很多網站目前都很頭痛,這包含了支付寶等支付平台。

首先,如何確認自己的網站是否有OpenSSL Heart Bleed問題呢?你可以拜訪Filippo網站來檢查看看

http://filippo.io/Heartbleed

然後輸入自己網站的名稱按下GO,如果網頁出現 vulnerable 字眼,那就代表你有OpenSSL Heart Bleed 資安問題。那怎麼修復呢?一般 x86 的Ubuntu可以藉由 apt-get update 和 apt-get upgrade 立即升級 openssl 到 1.0.1g 版本。但很可惜地,爹爹不疼奶奶不愛的CubieTruck 上的套件似乎沒有更新,所以一切必須得自己來。在這之前你可以先確認自己 openssl 版本,在終端機中輸入

openssl version

如果你是 1.0.1f 以下(含)的版本,不幸地那代表你中槍了。所以必須到 OpenSSL 官方網站下載套件自己編譯,請在終端機裡面輸入

wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz

然後另外下載兩個 patch 檔案

http://www.linuxfromscratch.org/patches/blfs/svn/openssl-1.0.1g-fix_parallel_build-1.patch
http://www.linuxfromscratch.org/patches/blfs/svn/openssl-1.0.1g-fix_pod_syntax-1.patch

之後,解壓縮 openssl-1.0.1g.tar.gz 檔案到自己目錄

tar -zxvf openssl-1.0.1g.tar.gz

把剛剛的patch檔案更新到目錄裡面

patch -Np1 -i ../openssl-1.0.1g-fix_parallel_build-1.patch
patch -Np1 -i ../openssl-1.0.1g-fix_pod_syntax-1.patch

然後進入解壓縮的目錄裡面組態一下

./config --prefix=/usr --openssldir=/etc/ssl --libdir=lib shared zlib-dynamic

組態好了就可以進行編譯了,在終端機中輸入

make

如果沒有gcc/make程式,那你必須先安裝相關套件。沒有意外,整個編譯過程大約需要25分鐘。之後在終端機內輸入

make install

這個過程必須使用 root 權限,大約需要五分鐘,大部分的時間都在安裝一些無所謂的 man 資訊。然後會把一些套件安裝在/usr/local/ssl 目錄裡面,編譯好的重要的東西包含

/usr/local/ssl/bin/openssl
/usr/local/ssl/include 目錄
/usr/local/lib/libssl.so.1.0.0
/usr/local/lib/libcrypto.so.1.0.0

注意,並不是只把 openssl 程式更新就可以了,函式庫沒有更新也是一樣有問題的。現在先取代一些舊的程式和函式庫,建議您備份舊的程式。第一個是 openssl 主程式

mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl

然後是函式庫,一樣也是建議備份舊的函式庫

mv /lib/arm-linux-gnueabihf/libssl.so.1.0.0 /lib/arm-linux-gnueabihf/libssl.so.1.0.0.bak
ln -s /usr/local/ssl/lib/libssl.so.1.0.0 /lib/arm-linux-gnueabihf/libssl.so.1.0.0

mv /lib/arm-linux-gnueabihf/libcrypto.so.1.0.0 /lib/arm-linux-gnueabihf/libcrypto.so.1.0.0.bak
ln -s /usr/local/ssl/lib/libcrypto.so.1.0.0 /lib/arm-linux-gnueabihf/libcrypto.so.1.0.0

再來是 include 目錄

mv /usr/include/ssl /usr/include/ssl.bak
ln -s /usr/local/ssl/include /usr/include/ssl

之後記得要重啟 apache2 服務

service apache2 restart

或是直接重新啟動機器比較保險

reboot

再來拜訪 Filippo 網站檢查是否已經修復完成

http://filippo.io/Heartbleed

如果出現

All good, your-website-name seems fixed or unaffected!

恭喜你,你已經修復完成。

如果你沒在第一時間內修復(2014/4/8),即便修復好了,強烈建議你把你網站的 HTTPS 認證證書重新申請一遍吧!因為

  1. 這不是一個新的漏洞,而是一個存在已久的漏洞,只是最近才爆發出來而已,所以有可能資料老早已經被竊取了。
  2. 所有的系統紀錄都不能知道誰曾經透過這個漏洞存取過你的網站資料,所以無從防範起。

額外提醒你,你常交易的的網路銀行等敏感的網站,也建議你先拜訪 http://filippo.io/Heartbleed 看看它的網站是否已經修復完成,不然這段時間先不要使用,以免個資外洩。