phpBB3.2.X 注册开启双验证

在这里讨论PHPBB3.2.X相关的使用、安装等话题
Forum rules
再次重申: 请不要用站内信件问问题, 有问题直接发到相应版面上, 今后任何此类信件恕不回复.
Post Reply
User avatar
IOsetting
论坛管理员
论坛管理员
Posts: 3645
Joined: 2006-10-17 1:48

phpBB3.2.X 注册开启双验证

Post by IOsetting » 2018-11-27 16:27

防范机器人注册是一个比较让人头疼的问题, 因为现在大部分机器人都已经配备了图片验证码识别, 无论是否开启GD, 生成的验证码图片都不能完全防住机器人注册.

phpBB3自带的比较有效的验证工具reCaptcha则要依赖于Google的服务, 这个在目前的环境下是无法使用的. 在phpBB官网上提供的验证码扩展很多也是这个情况, 需要依赖于第三方服务, 问题是一样的, 这里不作讨论.

现在比较有效的就是开启次数限制, 和问答验证. 其中次数限制是因为机器人识别图片有一定差错概率, 开启错误次数限制后, 能排除掉一些多次尝试错误的机器人. 问答验证是有针对性的, 比如中文的问题就会让背后是非中文使用者的机器人无所适从. 会有人说机器人可以调用Google Search来寻找问题答案, 但这是可以通过一些手段来规避的, 例如使用㊋星呅, 使用脱离上下文语境就无法回答的问题, 等等.

下面这个修改, 是从另一个角度来增加机器人注册的难度, 设置双重验证. 应该说, 任何与标准版不同的验证方式, 都能提升防御机器人注册的效果, 因为大部分使用注册机的人, 从性价比考虑, 不会仅仅为了攻破你的论坛的注册体系就去修改代码.

这个修改后, 将在注册表单处增加一个额外的验证, 你可以使用 GD或非GD, 后台则配置为QA.
注意不能使用两个GD或非GD, 也不能同时使用两个QA, 因为它们是等价的, 互相冲突.

需要修改的文件有5个:
ucp.php
includes/ucp/ucp_confirm.php
includes/ucp/ucp_register.php
styles/prosilver/template/ucp_register.html
phpbb/captcha/plugins/captcha_abstract.php
修改前请备份这五个文件

1. ucp.php
找到

Code: Select all

$mode	= $request->variable('mode', '');
在下面添加

Code: Select all

$sub_mode  = $request->variable('sub_mode', '');
找到

Code: Select all

$module->load('ucp', 'confirm');
替换为

Code: Select all

$module->load('ucp', 'confirm', $sub_mode);
2. includes/ucp/ucp_confirm.php
找到

Code: Select all

$captcha = $phpbb_container->get('captcha.factory')->get_instance($config['captcha_plugin']);
替换为

Code: Select all

if ($mode == 'default') {
    $captcha = $phpbb_container->get('captcha.factory')->get_instance('core.captcha.plugins.no_gd');
} else {
    $captcha = $phpbb_container->get('captcha.factory')->get_instance($config['captcha_plugin']);
}
3. includes/ucp/ucp_register.php
在239行附近, 找到

Code: Select all

// The CAPTCHA kicks in here. We can't help that the information gets lost on language change.
if ($config['enable_confirm'])
{
在下面添加

Code: Select all

$captcha_default = $phpbb_container->get('captcha.factory')->get_instance('core.captcha.plugins.no_gd');
$captcha_default->init(CONFIRM_REG);
在293行附近, 找到

Code: Select all

// Replace "error" strings with their real, localised form
$error = array_map(array($user, 'lang'), $error);

if ($config['enable_confirm'])
{
在下面添加

Code: Select all

$vc_response = $captcha_default->validate($data);
if ($vc_response !== false)
{
    $error[] = $vc_response;
}
在430行附近找到

Code: Select all

// Okay, captcha, your job is done.
if ($config['enable_confirm'] && isset($captcha))
{
	$captcha->reset();
}
替换为

Code: Select all

// Okay, captcha, your job is done.

if ($config['enable_confirm'])
{
    if (isset($captcha_default))
    {
        $captcha_default->reset();
    }
    if (isset($captcha))
    {
        $captcha->reset();
    }
}
在578行附近, 找到

Code: Select all

$s_hidden_fields = array_merge($s_hidden_fields, $captcha->get_hidden_fields());
在前面添加

Code: Select all

$s_hidden_fields = array_merge($s_hidden_fields, $captcha_default->get_hidden_fields());
在584行附近找到

Code: Select all

$template->assign_vars(array(
	'CAPTCHA_TEMPLATE'		=> $captcha->get_template(),
));
在前面添加

Code: Select all

$template->assign_vars(array(
    'CAPTCHA_TEMPLATE_DEFAULT'	=> $captcha_default->get_template(),
));
4. styles/prosilver/template/ucp_register.html
找到

Code: Select all

<!-- IF CAPTCHA_TEMPLATE -->
在前面添加

Code: Select all

<!-- IF CAPTCHA_TEMPLATE_DEFAULT -->
	<!-- DEFINE $CAPTCHA_TAB_INDEX = 8 -->
	<!-- INCLUDE {CAPTCHA_TEMPLATE_DEFAULT} -->
<!-- ENDIF -->
5. phpbb/captcha/plugins/captcha_abstract.php
找到

Code: Select all

$link = append_sid($phpbb_root_path . 'ucp.' . $phpEx,  'mode=confirm&amp;confirm_id=' . $this->confirm_id . '&amp;type=' . $this->type);
替换为

Code: Select all

$link = append_sid($phpbb_root_path . 'ucp.' . $phpEx,  'mode=confirm&amp;sub_mode=default&amp;confirm_id=' . $this->confirm_id . '&amp;type=' . $this->type);
完成后, 清理模板缓存, 刷新注册页面查看效果.

anicca
初来乍到
初来乍到
Posts: 1
Joined: 2019-01-09 9:18

Re: phpBB3.2.X 注册开启双验证

Post by anicca » 2019-01-09 9:24

手机登录注册,顶部出现如下信息,也能注册成功:

phpBB Debug] PHP Warning: in file [ROOT]/phpbb/captcha/plugins/qa.php on line 87: count(): Parameter must be an array or an object that implements Countable
[phpBB Debug] PHP Warning: in file [ROOT]/phpbb/captcha/plugins/qa.php on line 104: count(): Parameter must be an array or an object that implements Countable

请教如何处理?

User avatar
IOsetting
论坛管理员
论坛管理员
Posts: 3645
Joined: 2006-10-17 1:48

Re: phpBB3.2.X 注册开启双验证

Post by IOsetting » 2019-01-10 23:23

你的论坛是不是装了多个语言? 要避免这个警告, 对应每个语言都设置上问题和答案就可以了

nonolee
初来乍到
初来乍到
Posts: 2
Joined: 2019-02-09 17:27

Re: phpBB3.2.X 注册开启双验证

Post by nonolee » 2019-02-09 18:07

手机咋登陆啊?高手写个教程吧,跪求啦!

Post Reply