只做利于SEO的网站,提供网站建设、SEO、网站代运营等服务。服务中心 | 建站流程 | 网站地图

Wordpress禁止指定用户名注册及增加邮箱验证

2023-04-23小猴建站 阅读()相关主题:WordPress安全

Wordpress国内外都有不少用户在使用,安全性相对较高,有些企业站并不需要许多用户交互,完全关闭注册都可以,也可以减少被机器扫了后强制批量注册的风险。

Wordpress后台设置禁止用户注册

系统本身有这个限制,后台找到

系统 -> 常规 -> 成员资格

这里默认不勾选该选项,检查一下,也可以先勾选保存。再取消勾选再次保存。在域名后面加 /wp-login.php?action=register 访问后可以看到,已经有“错误:目前不允许用户注册”的提示。

很多情况下这个方法不能完全杜绝“垃圾”用户注册,还不断被同一个方法“骚扰”,可以接着设置禁止指定用户名和加入邮箱验证。

Wordpress禁止指定用户名注册

找到主题下的functions.php,底部加入如下代码,注意下面的 $forbidden = array('禁止的用户名1','禁止的用户名2') 根据实际情况增加或修改即可。

/**
* WordPress 禁止用户注册某些用户名
*/

function sozot_validate_username($valid, $username) {
  $forbidden = array('directory', 'domain', 'download', 'downloads', 'edit', 'editor', 'email', 'ecommerce', 'forum', 'forums', 'favorite', 'feedback', 'follow', 'files', 'gadget', 'gadgets', 'games', 'guest', 'group', 'groups', 'homepage', 'hosting', 'hostname', 'httpd', 'https', 'information', 'image', 'images', 'index', 'invite', 'intranet', 'indice', 'iphone', 'javascript', 'knowledgebase', 'lists','websites', 'webmaster', 'workshop', 'yourname', 'yourusername', 'yoursite', 'yourdomain');
  $pages = get_pages();
  foreach ($pages as $page) {
  $forbidden[] = $page->post_name;
 }
 if(!$valid || is_user_logged_in() && current_user_can('create_users') ) return $valid;
 $username = strtolower($username);
 if ($valid && strpos( $username, ' ' ) !== false) $valid=false;
 if ($valid && in_array( $username, $forbidden )) $valid=false;
 if ($valid && strlen($username) < 5) $valid=false;
 return $valid;
}
add_filter('validate_username', 'sozot_validate_username', 10, 2);

function sozot_registration_errors($errors) {
 if ( isset( $errors->errors['invalid_username'] ) )
 $errors->errors['invalid_username'][0] = __( '错误:该用户名不允许注册!', 'sozot' );
 return $errors;
}

add_filter('registration_errors', 'sozot_registration_errors');

Wordpress增加注册邮箱验证

继续在 functions.php 文件底部添加

//邮箱登录增加验证功能
add_action( 'register_form', 'add_security_question' );
function add_security_question() { ?>
 <p>
  <label><?php _e('预设问题') ?><br />
  <input type="text" name="cccitu_proof" id="cccitu_proof" class="input" size="25" tabindex="20" /></label>
 </p>
<?php }

add_action( 'register_post', 'add_security_question_validate', 10, 3 );

function add_security_question_validate( $sanitized_user_login, $user_email, $errors) {
 // 如果没有回答
 if (!isset($_POST[ 'cccitu_proof' ]) || empty($_POST[ 'cccitu_proof' ])) {
 return $errors->add( 'proofempty', '<strong>错误</strong>: 您还没有回答问题。' );
 // 如果答案不正确

 } elseif ( strtolower( $_POST[ 'cccitu_proof' ] ) != '设置好的答案' ) {
 return $errors->add( 'prooffail', '<strong>错误</strong>: 您的回答不正确。' );
 }
}

以上办法基本客户端(浏览器)能杜绝用户的恶意注册行为,但机器人仍有可能成功注册,别问我为啥知道,都是泪!尽可能做好软件和服务器的更新,及时发现问题,把损失降到最低。