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 中的相关内容。
评论