http://blog.sushiboy.com/2011/11/phpbbspam.html
由於我有用phpBB3架設一個論壇,維護論壇的工作還算是駕輕就熟,但是長期以來對付spammer,一直是很討厭的事。亂發文章的spammer如果是人,那還好辦,通常警告一下就沒事。Spammer如果是個機器人程式,那就煩了,他會自己註冊帳號、自己發文,客氣一點的發個一兩篇,不客氣的,直接把你的討論版塞滿垃圾文。
使用圖形式驗證也行之有年,我最後一代使用的是reCAPTCHA,不過不到一年也被破解了。後來phpBB的驗證系統多了問答集(Q&A),也就是你問一個夠特殊的問題,讓用戶可以想到答案,但是機器人無法猜到解答。例如我在網站左上角放了網站的成立時間。使用者註冊時,必須回答這個成立的年份加十年是哪一年,結果效果相當不錯,大約又有很長一段時間沒有機器人來騷擾(想必機器人的中文是不太好 =_=)。不過最近,這招還是被破解了,再換個題目也只是治標不治本的方法,因此我查詢了一下,找到了救星... Stop forum spam網站(後續簡稱SFS)。
SFS提供搜尋,讓你用會員的ip、email、帳號名稱來查詢,是否有被其他論壇告過狀,更好的是,SFS也提供API讓網站管理者可以加個簡單的程式,就可以自動化辨識使用者是否在黑名單上,SFS會回傳各項資料是被檢舉過幾次。以phpBB 3.0.9為例,最適合加入的地方就是在註冊頁,首先找到 includes/ucp/ucp_register.php,在大約238行找到
// DNSBL check
if ($config['check_dnsbl'])
{
if (($dnsbl = $user->check_dnsbl('register')) !== false)
{
$error[] = sprintf($user->lang['IP_BLACKLISTED'], $user->ip, $dnsbl[1]);
}
}
在之後(約246行)加入一段SFS API:
$xmlStr = @unserialize(file_get_contents("http://www.stopforumspam.com/api?ip=" .$user->ip. "&email=" .$data['email']. "&f=serial"));
if($xmlStr['ip']['frequency'] >= "3" || $xmlStr['email']['frequency'] >= "3") {
mail('xxx@xxx.com', 'spam alert '.date("Y-m-d"), $user->ip." x".$xmlStr['ip']['frequency']."\n".$data['email']." x".$xmlStr['email']['frequency']);
$error[] = "We're Sorry! The email address is not allowed. Or your IP address is blacklisted. Please contact the webmaster if this is in error.";
}
程式相當簡潔,$xmlStr取回檢舉資料,如果ip或是email其中一個被檢舉大於3次(可以自訂,通常spam ip都早已被檢舉上百次),就發個mail(紅色部分)通知管理員,xxx@xxx.com請自行修改為收件人email,主旨會是spam alert加上當天日期。收到信的內容大致如下:
69.162.74.82 x6044
xxxxxx@xxx.com x1457這個ip已經被檢舉6044次。重點是紫色部分,只要$error裡面有值,註冊就不會過。其實原本是沒有寫mail機制,但是因為不知道到底有沒有成功,於是加上個mail機制才知道有沒有抓到機器人。結果實際測試的時候,12小時收到三十幾封email,沒有一個機器人註冊成功,真的是非常有效啊 ^_^
除此之外,可以進一步在管理會員頁,增加如下的連結:
萬一有可疑的帳號需要檢測時,可以一鍵詢問SFS。SFS的資料來源都是靠網友們檢舉,因此也可以加上一個檢舉的連結,不過要使用到檢舉的API功能,必須先註冊帳號取得API key,才可以加入檢舉spammer的行列哦。
[phpbb]對抗spam機器人大戰
前往
- Software
- ↳ CodeCharge Studio
- ↳ CodeCharge
- ↳ DemoCharge
- ↳ SuperPDF
- ↳ 551einv
- ↳ E3進銷存
- 程式語言
- ↳ PHP
- ↳ CodeLobster PHP Edition
- ↳ Yii
- ↳ CodeIgniter
- ↳ Phalcon
- ↳ Symfony
- ↳ FuelPHP
- ↳ Zend Framework 2
- ↳ laravel
- ↳ WordPress
- ↳ ASP.NET/C#
- ↳ ASP/VBScript
- ↳ JSP
- ↳ Java Servlets
- ↳ ColdFusion
- ↳ Perl
- ↳ Java Script
- ↳ jQuery
- ↳ HTML + CSS
- ↳ jQuery
- ↳ nodejs
- ↳ VB6
- ↳ Git
- ↳ App Inventor 2
- ↳ bash
- ↳ C++/ VC/ OpenCV
- ↳ OpenCV
- ↳ go
- ↳ cordova
- ↳ python
- ↳ Xamarin
- ↳ Assembly
- 資料庫
- ↳ MySQL
- ↳ PostgreSQL
- ↳ ORACLE
- ↳ Access
- ↳ SQL Server
- ↳ SQLite
- ↳ MariaDB
- ↳ Mongodb
- 作業系統
- ↳ Linux
- ↳ Ubuntu
- ↳ CentOS
- ↳ Mint
- ↳ Mandriva
- ↳ Debian
- ↳ Red Hat Enterprise Linux
- ↳ Oracle Linux
- ↳ Fedora
- ↳ Kali Linux
- ↳ OpenSUSE
- ↳ Elementary OS
- ↳ Microsoft
- ↳ Server 2008 R2
- ↳ Server 2012 R2
- ↳ Server 2012
- ↳ 8
- ↳ 10
- ↳ System Center 2016
- ↳ NOVELL
- ↳ FreeBSD
- ↳ VMware
- ↳ VirtualBox
- ↳ Mac OS X
- ↳ Solaris
- ↳ iOS
- ↳ Android
- ↳ Cloud
- ↳ OpenStack
- ↳ Docker
- ↳ Proxmox VE
- ↳ CloudReady
- ↳ chrome
- 網頁伺服器
- ↳ apache
- ↳ tomcat
- ↳ nginx
- ↳ IIS
- ↳ JBoss
- ↳ weblogic
- ↳ WebHosting
- 硬體
- ↳ 硬體及週邊
- ↳ RouterOS
- ↳ LEGO NXT
- ↳ Arduino
- ↳ MSP430
- ↳ Raspberry Pi
- ↳ OpenERP
- ↳ Storage
- ↳ Server
- ↳ Brocade
- ↳ MODELS
- ↳ FortiGate
- 軟體
- ↳ sublime
- ↳ LibreNMS