您在這裡

Drupal站點聯絡表屏蔽來自俄羅斯的垃圾郵件

James Qi 在 2018年3月21日 - 16:04 發表

  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 中的相關内容。

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。