WordPressのセキュリティ対策(WP本体)その2

WordPress本体に対して行うセキュリティ対策「WordPressのセキュリティ対策(WP本体)」の続きです。

WordPressのバージョン情報を隠蔽する

WordPressのバージョンが分かってしまうと、それをヒントに攻撃者からそのバージョンの脆弱性が狙われるリスクが高くなるため、バージョン情報はページ上のどこにも出力されない方がよいという考えに基づく対策です。

WordPressのデフォルトテーマのままでは見た目上はバージョン情報が表示されませんが、HTMLのソース上にはWordPressのバージョン情報が出力されてしまうようです。
テーマ「Twenty Sixteen」で、ページのソースを調べると下記のように出力されていました。(パスの部分は*に置き換えてあります)

headタグ内に出力

<script>window._wpemojiSettings = {*.js?ver=5.8.2"}};
<link rel='stylesheet' id='*-css' href='*.css?ver=5.8.2' media='all' />
<meta name="generator" content="WordPress 5.8.2" />

bodyタグ内に出力

<script src='*.js?ver=5.8.2' id='admin-bar-js'></script>

バージョン情報を出力しないようにする方法

function.php に所定のコードを追記追記することで対応できるようです。function.php の編集はWordPressの管理画面上でも行うことができます。([外観] > [テーマエディター]でfunction.php を選択して編集します)

metaタグのgeneratorを非表示にする

function.php に下記を追記します。(末尾に追記しました)
これで、metaタグ自体が出力されないようになります。

remove_action( 'wp_head', 'wp_generator' );

JavaScriptやCSSのパラメータを非表示にする

function.php に下記を追記します。(末尾に追記しました)
これで、scriptとlinkのタグ自体は変わらず出力されますが、パラメータの”?ver=5.8.2″の部分は出力されなくなりました

function remove_cssjs_ver2( $src ) {
    if ( strpos( $src, 'ver=' ) )
        $src = remove_query_arg( 'ver', $src );
    return $src;
}
add_filter( 'style_loader_src', 'remove_cssjs_ver2', 9999 );
add_filter( 'script_loader_src', 'remove_cssjs_ver2', 9999 );

なお、下記のコード追記でも非表示にできるようでしたが、headタグ内のscriptタグのパラメータのみ非表示にすることができませんでした。(原因は分かりませんが、実際に起きたこととして記録しておきます)

function remove_src_wp_ver( $dep ) { 
	$dep->default_version = '';
}
add_action( 'wp_default_scripts', 'remove_src_wp_ver' );
add_action( 'wp_default_styles', 'remove_src_wp_ver' );

今回は以上です。WordPress本体に対して行うセキュリティ対策、他にも何かあれば掲載しようと思います。

WordPressのセキュリティ対策(プラグイン)

プラグインを使ったWordPressのセキュリティ対策をします。
使いたかった機能から候補のプラグインは以下の2つに絞りました。
SiteGuard WP Plugin – EG Secure Solutions
All In One WP Security & Firewall(AIOWPS)
たった1日ですが吟味した結果、使いやすそうなSiteGuard WP Plugin を使うことにしました。純国産として定評のやつです。

今回対応したこと

使いたかった機能

  • ログインページのURLを変更
    • WordPressのデフォルト「/wp-login.php」ではアクセスできなくする。プラグインのデフォルト「/login_<5桁の乱数>」よりもっと見つけづらくしたかったので変更しました。
  • ユーザ名の漏洩防止
    • 投稿者アーカイブを使って登録されているユーザ名が特定されないようにする(”/?author=n” でユーザ名がURL上に表れて特定されないようにする)
  • PingBack機能を無効化する
    • DDoS攻撃の踏み台としてPingBack機能が悪用されないようにする。
  • アカウントロック
    • 連続してログイン失敗した場合、一時的にログインできないようにする。
  • ログイン失敗時のメッセージ共通化
    • ログインに失敗した際に表示するメッセージからユーザ名が登録されているか、パスワードのみの不一致だったのかが分からないようにする。

せっかくだから使った機能

  • CAPTCHA
    • ログインページに動的に生成される画像に表示された内容を入力させて認証時の要素として使う機能。(コメント投稿も)
  • ログイン通知
    • ログインが成功する度に、登録したメールアドレス宛にメールで通知を行う。
  • 更新通知
    • WordPress本体、プラグイン、テーマの更新がある場合、登録したメールアドレス宛にメールで通知を行う。

今回はここまで。他にも確認したいことややっておきたいことがあるので、次回はその辺をやろうと思います。ただ、どこまでやってるかを開けっ広げにするのもどうかと思うので投稿はしないかもしれないです。

WordPressのセキュリティ対策(WP本体)

セキュリティ対策に有効なプラグインがありますが、その前に最低限やっておきたいWordPress 本体のセキュリティ対策をしておきます。
※WordPress のバージョン:5.8.2(2021年12月20日時点の最新版)

今回対応したこと

WordPressを最新版に更新

[ダッシュボード] > [更新] の現在のバージョンのリンク「再確認してください」をクリック。最新版だったので最終チェック日時が更新されただけでした。

WordPressの自動更新の有効化

[ダッシュボード] > [更新] に”このサイトは WordPress の新しいバージョンごとに自動的に最新の状態に保たれます” と表示されていたのでデフォルトで有効になっているようです。

その下に「メンテナンスリリースとセキュリティリリースのみの自動更新に切り替えます」というリンクがあったので試しにクリックしてみました。すると、”メンテナンスリリースとセキュリティリリースのみで自動的に最新の状態に保たれます” に表示が変わったので、その下のリンク「WordPress のすべての新しいバージョンに対する自動更新を有効にします」をクリックして元に戻しておきました。

プラグインとテーマを最新版に更新

[ダッシュボード] > [更新] に”〜はすべて最新版です” と表示されてたので、今回は何も更新しませんでした。

ユーザ名、パスワードの複雑化

ユーザ名は、直前の投稿「ブログ開設作業」でも書きましたが、ログイン時に入力するユーザ名とブログ上に表示するユーザ名を別にすることができるので、ログインに使うユーザ名は推測が困難な文字列にしておきました。これで、ユーザ名を固定したパスワードのブルートフォース攻撃が簡単に行われないようにしました。(投稿者アーカイブによるユーザ名の特定を防ぐ方法はプラグインで対応します)

パスワードは、新たにパスワードマネージャで生成した英数字記号混在の30桁以上の文字列を設定しました。

不要なユーザの削除

このブログは自分一人でしか使わないので、ユーザは1人だけしか登録されていない状態にしておきます。

今回のWordPress本体のセキュリティ対策は以上としておきます。次回はプラグインを使ったセキュリティ対策をします。

参考

ブログ開設作業

今回のブログ開設作業がどのようなものであったのかの記録です。

環境・費用

費用をなるべく抑えたかったので、環境はさくらインターネットの「さくらのレンタルサーバ」というサービスの「スタンダードプラン」(初期費用1,048円円、年間料金5,238円)を使うことにしました。
https://rs.sakura.ad.jp/standard.html

「スタンダードプラン」はWordPressが使える一番安いプランです。必要条件と思っていたSSL対応(Let’s Encrypt)、独自ドメインを備えていて、ディスク容量も100GBとブログを運用するにはこれで充分と判断しました。

SSL対応はLet’s Encrypt を採用したので無料でできましたが、独自ドメイン(madoverload.com)は有料サービスだったので、安定の.com ドメイン(年間料金1,952円)を取得することにしました。独自ドメインは複数年契約できますが、大して安くならないので1年契約にしました。
https://domain.sakura.ad.jp/

結果、当ブログ運用にかかる費用は下記になります。
・初期費用:1,048円
・年間費用:7,190円

作業時間

昨日は一日中このブログ開設の作業をしていた感じです。初投稿が18時頃だったので7〜8時間くらいかかったようです。
独自ドメインのDNSへの反映やSSLを有効にするのに少し待ち時間ができましたが、それ以外は待ち時間なく作業することができた感じです。
おおまかな作業手順だけ記載しておきます。

  1. データベース作成(MySQL)
  2. www配下にフォルダ作成(WordPressインストール先)
  3. 独自ドメイン取得
  4. 取得したドメインを新規追加
  5. SSL証明書の申請・設定(Let’s Encrypt)
  6. WordPress インストール(クイックインストールを使用)
  7. WordPress 初回ログイン・プラグインの更新

WordPress を公式サイトからダウンロードしたものをアップロードしてインストールするより簡単そうなので、せっかく用意されているクイックインストールを使いました。クイックインストールは実際簡単でしたが、インストールする際に登録したユーザしかインストール時に作成されないので、安全面でもいいのではないかと思いました。
ちなみにログイン時に入力するユーザ名とブログ上に表示するユーザ名を別にすることができるので、ログインに使うユーザ名は推測が困難な名前にしておいた方がよさそうです。今回、簡単なユーザ名にしてしまったので、インストール後にWordPressの設定画面で別のユーザを作成して、インストール時に作成したユーザは削除することにしました。

まだ初期設定状態なので、とりあえずこれからセキュリティに配慮した諸々の対応をするところからしていこうと思います。WordPressはしばらく触っていなかったので、最新の情報を調査しながら進める予定です。