WordPress安全性优化:强密码和增加后台登陆安全码验证

虽然我们的网站还没有强大到让别人有黑站的冲动,优化我们的WordPress网站安全性,主要还是防护我们的网站及服务不要被挂码或被当成肉鸡来助纣为虐。WordPress安全性优化第一步:

  • 不要将管理员用户名保留成默认的Admin或是与网站域名关键词相关的
  • 将WordPress的密码采用强密码,所谓强密码,就是使用字母大小写混用,并加上字符和数字无规则排列而生成的强密码,让密码猜测器无从下手。
WordPress Security Optimization
WordPress Security Optimization安全性优化

在完成上述的基本的WordPress安全性优化后,个人建议增加登陆安全码,就像很多网站一样,除了输入用户和密码外,还会增加数字或符号识别验证码或是其它一些图形验证码,甚至有些用到了登陆手机动态码验证才能登陆,也就是双重验证机制。目的一是为了防止有心人的强行登陆,另外就是为了识别机器人自动登陆。

WordPress提供了很多的插件来达到上述目的,从个人目的来,只需要简单在functions.php中增加几行代码,便可以增加一些简单的自定义安全码来进行二次验证,虽然不够强大,对付一般的网络攻击还是有效的。

第一步,在functions.php增加自定义安全码输入项

本方法是结合主题中的customize自定义功能来实现的,而非插件式,所以此方法形成的安全验证码只会跟目前使用的主题相关联,如果你更换了主题,自功能就不可用了。

// Add Security Panel in Customizer
add_action( 'customize_register', 'cq_security_panel_register' );
function cq_security_panel_register( $wp_customize ) {

    $wp_customize->add_section( 'security_reinforce', array(
        'title'    => __( 'Security Reinforce', 'colinqi' ),
        'priority' => 220,
    ) );
	// Security Key for login page
    $wp_customize->add_setting( 'login_sk', array(
		'default' => 'colinqi',
		'transport' => 'postMessage',
		'type'              => 'theme_mod',
		'capability'        => 'edit_theme_options',
		'sanitize_callback' => 'sanitize_text_field',
    ) ); 
    $wp_customize->add_control( new WP_Customize_Control( $wp_customize, 'login_sk_content', array(
        'label'     => __( '#1: Login Security Key', 'colinqi' ),
		'description' => __('Input your own security key,only support text! Default value:colinqi', 'colinqi'),
		'type' => 'text',
        'settings'  => 'login_sk',		
        'section'   => 'security_reinforce',
    ) ) );		
		
}

增加上功能后,在后台的外观-自定义下增加一项安全选项,这样你就可以填写自己的安全码了。

第二步:在后台登陆界面增加安全码验证栏

在functions.php的安全码设置完成后,便需要在后台登陆界面增加安全码验证栏,每次登陆你都要记得你填写过的安全码了。

// Add Security Code check in login page

$cq_protected_login_key = 'login_security_code_check';
$cq_protected_login_val = get_theme_mod( 'login_sk', '默认安全码' );

if($cq_protected_login_val) {
	/* Add security form in login page */
	function cq_protected_wp_login_form() { 
		global $cq_protected_login_key;
		?><p>
			<label for="<?php echo $cq_protected_login_key; ?>"><?php esc_attr_e( 'Security Code', 'colinqi' ); ?></label>
			<input type="text" name="<?php echo $cq_protected_login_key; ?>" id="<?php echo $cq_protected_login_key; ?>" class="input" value="" size="20" autocapitalize="off">
		</p><?php
	}

	/* Login Authenticating */
	function cq_protected_wp_login_authenticate($user) {
		if(isset($_POST['log']) && isset($_POST['pwd'])) {
			global $cq_protected_login_key, $cq_protected_login_val;
			$err_msg = '';
			if(!isset($_POST[$cq_protected_login_key])) {
				$err_msg = 'Invalid login request';
			} else if(!$_POST[$cq_protected_login_key]) {
				$err_msg = 'Must Enter Security Code';
			} else if($cq_protected_login_val !== $_POST[$cq_protected_login_key]) {
				$err_msg = 'Error in Security code';
			}
			if($err_msg) {
				return new WP_Error('authentication_failed', '<strong>Warning</strong>:' . $err_msg);
			}
		}
		return $user;
	}

	/* Loading login functions */
	function cq_protected_wp_login() {
		add_action('login_form', 'cq_protected_wp_login_form', 1000);
		add_action('authenticate', 'cq_protected_wp_login_authenticate', 1000, 1);
	}
	add_action('login_init', 'cq_protected_wp_login', 1000);
}

这里要注意的是,在验证安全码时,最好设置默认的安全码,因为在代码生效时,最好带有默认的安全码为好,虽然为空也不会有问题。将下面"默认安全码"更换成你的默认安全码即可。

$cq_protected_login_val = get_theme_mod( 'login_sk', '默认安全码' );

WordPress安全性优化:增加后台登陆安全码验证设置完毕.

 

« 网站安全在线检测Mozilla Observatory WordPress博客安全强化设置指引 »

Say Something!

Leave a Reply