[WordPress] セキュリティ向上のためにやることリスト

毎度うっかりするからまとめた。

1. 不要なファイルは消す

  • readme.html
  • license.txt
  • wp-admin/install.php

2. ログインエラーの変更

詳細な内容からふわっとした内容に変える。

add_filter( 'login_errors', function( $error ) {
	global $errors;
	$err_codes = $errors->get_error_codes();

	// Invalid username.
	// Default: '<strong>ERROR</strong>: Invalid username. <a href="%s">Lost your password</a>?'
	if ( in_array( 'invalid_username', $err_codes ) ) {
		$error = '<strong>エラー</strong>: ログインできません';
	}

	// Incorrect password.
	// Default: '<strong>ERROR</strong>: The password you entered for the username <strong>%1$s</strong> is incorrect. <a href="%2$s">Lost your password</a>?'
	if ( in_array( 'incorrect_password', $err_codes ) ) {
		$error = '<strong>エラー</strong>: ログインできません';
	}

	return $error;
} );

3. authorページを表示しない

ログインIDの特定に利用されるため。

/**
 * authorページを表示しない
 */
 add_filter( 'author_rewrite_rules', '__return_empty_array' );

4. 著者アーカイブを表示しない

これもIDの特定に利用されるため。

/**
 * 著者アーカイブを表示しない
 */
add_action('init', function () {
   if( is_author() || ($_GET && array_key_exists('author', $_GET)) || preg_match('#/author/.+#', $_SERVER['REQUEST_URI']) ){
     wp_redirect( home_url( '/404' ) );
     exit;
   }
});

5. REST APIでusersリクエストを返さない

これもIDの特定に利用されるため。

add_filter( 'rest_endpoints', function( $endpoints ){
  if ( isset( $endpoints['/wp/v2/users'] ) ) {
    unset( $endpoints['/wp/v2/users'] );
  }
  if ( isset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] ) ) {
    unset( $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
  }
  if ( isset( $endpoints['/wp/v2/users/me'] ) ) {
    unset( $endpoints['/wp/v2/users/me'] );
  }
  return $endpoints;
});

全部または特定のデフォルトエンドポイントを消すならこれで。

6. feedの出力をしない or 限定する

/**
 * Feedの出力全部殺す
 */
add_action( 'parse_query', function ( $obj ) {
	if ( $obj->is_comment_feed || $obj->is_feed ) {
		wp_die('', '', array( 'response' => 404, "back_link" => true ));
	}
});

post_typeなどで殺すのを選ぶ場合は条件を追加する

// post_type=news 以外を殺す
( $obj->is_feed && $obj->get('post_type') !== 'news')

7. headタグから不要なmeta情報を消す

自動フィードリンクしないのは前のfeed殺すのと併用か、自作テーマでリンク入るところを限定したい時に一旦全部消す場合などに。

add_action( 'after_setup_theme', function() {
  // generatorを非表示にする
  remove_action('wp_head', 'wp_generator');

  // EditURIを非表示にする
  remove_action('wp_head', 'rsd_link');

  // wlwmanifestを非表示にする
  remove_action('wp_head', 'wlwmanifest_link');

  //自動フィードリンクしない
  remove_action( 'wp_head', 'feed_links', 2 );
  remove_action( 'wp_head', 'feed_links_extra', 3 );
});

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください