chillu/memberspamcheck

此包已被弃用且不再维护。未建议替代包。
最新版本(dev-master)的此包没有提供许可证信息。

标记成员为垃圾邮件的扩展

安装: 6

依赖者: 0

建议者: 0

安全: 0

星标: 4

关注者: 2

分支: 2

开放问题: 0

类型:silverstripe-module

dev-master 2016-02-22 10:22 UTC

This package is auto-updated.

Last update: 2020-11-21 11:50:48 UTC


README

概述

根据用户数据检查现有成员记录的垃圾邮件迹象。有助于论坛模块,以对抗绕过标准验证码技术的垃圾邮件注册。

默认情况下,它连接到stopforumspam.org的免费API(仅限非商业用途,请参阅服务条款)。

维护者

  • Ingo Schommer

要求

  • SilverStripe 3.1或更高版本
  • PHP 5.3或更高版本(具有JSON支持)
  • PHP curl扩展

用法

在命令行中运行php sapphire/cli-script.php MemberSpamCheckTask,这将针对预定义的Member记录数量进行检查,从创建日期最新的记录开始。它根据实现的检查类将每个记录的SpamCheckScoreSpamCheckData属性写入。

垃圾邮件分数

分数为-1表示未进行检查,0表示未检测到垃圾邮件,1-100是根据实现检查类中的各种标准汇总的垃圾邮件分数。

支持的成员属性

默认情况下,在Member类上支持三个属性:EmailNicknameIP(请参阅MemberSpamCheckService::$default_property_map)。默认情况下仅激活Email。其他两个字段取决于您对Member类的使用(和扩展)。论坛模块添加了Nickname

IP跟踪必须在自定义代码中定义(例如,在您的注册逻辑中)。您可以使用SS_HTTPRequest->getIP()方法获取客户端IP。强烈建议使用此标志,因为原始IP是确定垃圾邮件分数的最强有力的标准之一。请参阅以下“如何:在论坛模块上跟踪IP注册”。

如何

在论坛上跟踪IP注册

论坛模块有一个onForumRegister钩子,当新的Member记录被调用时,将调用它。我们可以使用它来跟踪IP信息

mysite/code/MyMemberExtension.php:

<?php
class MyMemberExtension extends DataObjectExtension {

	private static $db = array(
		'IP' => 'Varchar(200)',
	);

	public function onForumRegister($request) {
		// Check for weird IP address formats like "97.72.127.18, 97.73.64.151". see https://regexper.cn/examples.html
		$ip = $request->getIP();
		if($ip && !preg_match('/^\b(?:\d{1,3}\.){3}\d{1,3}\b$/', $ip)) {
			// Write first detected IP, rather than a comma-separated list
			$this->owner->IP = trim(array_pop(preg_split('/\s*,\s*/', $ip)));
			$this->owner->write();
		}
	}
}

mysite/_config/config.yml:

Member:
  extensions:
    - MyMemberExtension

在论坛模块上暂停垃圾邮件成员

默认情况下,检测到的垃圾邮件分数对拒绝登录、发布评论或其他用户行为等功能没有任何影响。如果您正在使用论坛模块,它自带一个内置的SuspendedUntil日期,我们可以使用它来阻止垃圾邮件用户发布内容。为了写入这个属性,我们如下子类化MemberSpamCheckTask

class MyMemberSpamCheckTask extends MemberSpamCheckTask {

	protected function updateMembers($members) {
		$spamMembers = parent::updateMembers($members);
		foreach($spamMembers as $spamMember) {
			// We don't have a plain "suspended flag", just make it a reaaaaallly long time.
			// On the other hand, its useful to work back to when a member was flagged.
			$spamMember->LockedOutUntil = date('Y-m-d', strtotime('+100 years', SS_Datetime::now()->Format('U')));
			$spamMember->write();
		}

		return $spamMembers;
	}

	/**
	 * Limit to members which aren't already suspended.
	 */
	protected function getMembers() {
		return DataObject::get('Member', '"SpamCheckScore" = -1 AND "LockedOutUntil" IS NULL', '"Created" DESC', null, $this->getLimit());
	}

}

像以前一样运行任务,但使用新的名称:php sapphire/cli-script.php MyMemberSpamCheckTask

待办事项

  • 与论坛模块的帖子审核集成,并允许将结果发布到各种API

许可证

Copyright © 2011 Ingo Schommer (ingo at silverstripe dot com) and SilverStripe Limited (www.silverstripe.com). All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of Ingo Schommer nor SilverStripe nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.