Drupal網站有站點聯絡功能,是通過填寫contact表單來發送郵件實現的,我們總是收到一些來自俄羅斯的垃圾郵件,這些俄羅斯黑客有一定技術,可以識别圖片驗證碼,使我們的主要反垃圾措施失效,但垃圾終究是垃圾,這種長期自動騷擾别人的做法,這世界上做得最多的就是俄羅斯人和中國人了,真是為國家丢臉,希望中國人幹這些事的人以後少些吧。
早就想找辦法來屏蔽,本來Drupal還自己帶有“觸發”、“動作”機制的,但好像原來屏蔽關鍵詞就沒有實驗成功,所以這次幹脆找底層API來解決,通過1個小時的摸索,找到了辦法。
在自定義模塊(如果沒有自定義模塊,可以修改theme主題下的template.php程序)中添加以下代碼:
function my_module_mail_alter(&$message) {//調用hook_mail_alter if (strpos($message['from'],'.ru') != FALSE) {//“來自”裡面的郵箱地址包含.ru的一律不發送 $message['send'] = FALSE; } if (isRussian(implode("|",$message['body'])) || isRussian($message['subject'])) {//“正文”或者“标題”裡面包含俄文字母的一律不發送 $message['send'] = FALSE; } } function isRussian($text) {//判斷是否包含俄文的函數 return preg_match('/[А-Яа-яЁё]/u', $text);//正則表達式判斷是否包含俄文字母 }
測試可以實現預期的效果,雖然帶有俄文的内容也可以提交成功,甚至系統也給出了發送成功的提示信息,但實際上是沒有發送出去的。
希望這個辦法可以給受到類似騷擾的Drupal站長以幫助,也可以啟發實現其它的一些特征屏蔽。
2019年9月19日補充:要屏蔽comment form中的特征,可以使用hook_form_comment_form_alter,要屏蔽contact form中的特征,可以使用hook_form_contact_form_alter,可以參考function hook_form_FORM_ID_alter,還有這篇How to stop spam in comment 中的相關内容。
评论