【WordPress】すぐできるセキュリティ対策を6個挙げてみたぞ〜〜〜

## はじめに
<img width="100px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557847/16fcd2a8-775a-0abd-31da-f265fcca344b.png">

こんにちは。[yuki(ほりゆう)](https://twitter.com/yuki82511988/photo)と申します。

エンジニアになってから副業でWordPressでのサイト制作や、改修などを依頼されることが何度かありました。

何度か触るうちにWordPressに興味を持ち、世界中のいろいろなサイトがWordPressで開発されてると知り、セキュリティに関しても何か対策したいなと思うようになりました。

本記事では、自分が調べた上で行っているWordPressのセキュリティ対策をご紹介します。
**簡単なLinux周りの知識、PHP、WordPressのコード開発の基礎、FTPクライアントなどの知識が前提です。**

:::note warn
2022/12/02現在の内容です。
:::

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557847/65f5463a-dea0-fbb8-5ba7-3750487b60e9.png">

### 🏷 バージョンを非表示にするぞ〜〜
WordPressはこれまで様々なバージョンアップデートがされ、セキュリティの対策がされています。
一方で、古いバージョンには今は改善されている脆弱性がある可能性が高いです。

もし、ご自身の運営しているサイトのバージョンが攻撃者に伝わってしまうと『このサイトのWordPressはこのバージョンだから、あの方法で悪さをしよう...』と思われてしまいます。

WordPressのバージョンは、ソースを表示すればこんな感じで閲覧できてしまうのです。

```html
<meta name="generator" content="WordPress 3.6.1" />
```

ということで、これが出力されないようにしましょう。

`functions.php`に下記のように記述します。

```php
remove_action('wp_head','wp_generator');
```

`wp_head`アクションフックに設定されている`wp_generator`を呼び出さないようにするのですね。

[関数リファレンス/remove action \- WordPress Codex 日本語版](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/remove_action)

面白いことに、公式でもユースケースとして同様のことが紹介されていました。
[wp\_generator\(\) \| Function \| WordPress Developer Resources](https://developer.wordpress.org/reference/functions/wp_generator/)

<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557847/3a0cb4eb-ea20-a1e6-88cc-ec360b488c42.png">

### 📛 投稿者名を非表示にするぞ〜〜〜
WordPressで作成したサイトに記事などを投稿すると、投稿者名が表示される場合があります。また、この投稿者名がWordPressの管理画面にアクセスする際のIDになっている場合もあります。

ということで、IDがバレるのはよくないので非表示にしましょう。

WordPressの管理画面から`ユーザー`＞`プロフィール`でサイト上の表示名を設定できる箇所があるはずです。このにIDではない任意の名前を入れておきましょう。

#### ❗️ 思わぬ落とし穴に注意だぞ〜〜〜
これで表示名を変えることができても、名前の部分をクリックすると**投稿者アーカイブページ**という、これまでその投稿者が投稿した記事などの一覧を見るページに飛ばされてしまいます。

そしてそのURLに元々の投稿者=IDが表示されてしまいます。(確か)
投稿者がそもそも1人のブログなどでは、投稿者ごとのアーカイブページはなくても大丈夫かと思いますのでアクセスできないようにしましょう。

自分はこちらのプラグインを使用しています。

[Edit Author Slug – WordPress プラグイン \| WordPress\.org 日本語](https://ja.wordpress.org/plugins/edit-author-slug/)

URLを表示しているコードはこちらなので、実装箇所を非表示にするのも良さそうです。
もしくは、難しいコードが書ける方は投稿者アーカイブページにアクセスされた場合、404を表示させるなど。

[テンプレートタグ/the author posts link \- WordPress Codex 日本語版](https://wpdocs.osdn.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0/the_author_posts_link)

こんな素敵な記事もありました。
[投稿者アーカイブを無効化してWordPressのユーザ名を隠す方法 – ウェブコンテンツ](https://blog.webcontent.jp/entry/no-author-archive)


::: note notice
本記事では、1つ1つのツールや管理画面の操作には言及せず、対策の方法だけを述べたいと思います。
セキュリティに関しては何をなんのために、何をしているのかリンク先を参考に調べていただき、ぜひご自身の手で理解を深めつつ設定してください。
:::


### 🔍 /wp-adminで管理画面の認証画面に行かないようにするぞ〜〜〜
WordPressで作成して何も設定していないサイトでは、`/wp-admin`にアクセスすると管理画面へアクセスするための認証画面が表示されます。攻撃者がここにアクセスできてしまうと、新入まであと一歩なのでよろしくないです。

`/wp-admin`とURLに入力してもアクセスできないように対策をしましょう。

自分は下記のプラグインを使用しました。

[SiteGuard WP Plugin – WebセキュリティのEGセキュアソリューションズ](https://www.jp-secure.com/siteguard_wp_plugin/)


### 🙅‍♂️ ログインの試行回数を制限するぞ〜〜〜
何度もログインの試行が出来ると辞書攻撃に弱くなってしまいます。何度か行うともうログインできなくさせる（もしくは遅延させる）対策を取りましょう。

これも上記で紹介したプラグインを使用するとできます。こういった複数対応ができるのも自分が選定した理由です。
[SiteGuard WP Plugin – WebセキュリティのEGセキュアソリューションズ](https://www.jp-secure.com/siteguard_wp_plugin/)

[辞書攻撃 \- セキュリティ対策関連キーワード \| NTTスマートコネクト](https://cloud.nttsmc.com/sns/useful/keyword/dictionary-attack.html)


### 📝 wp-config.php のパーミッションやアクセスに制限をかけるぞ〜〜〜
パーミッションは600で良いと思っています。（オーナーのみ読み書き可能他は不可）

また、`.httaccess`を編集して関わる方のIPアドレス以外のアクセスを拒否します。


```.htaccess
<files wp-config.php>
order allow,deny
deny from all
Allow from 許可するIPアドレス(変更する可能性があるアドレスは注意)
</files>
```

### おまけだぞ〜〜〜

自分はやったことないのですが、こんなものがあるのですね。やってみてもいいかも。 素敵な記事に感謝✏️
[WPScanを使ってWordpressをスキャンする \- Qiita](https://qiita.com/koujimatsuda11/items/d49e8642dea1a1b0d067)

本記事を作成する際に、MarkdownのURLを沢山発行しました。[ ]と( )で囲むやつです。いちいち入力すると大変ですが、このChrome拡張機能を使うと右クリック一発なので便利です。

https://chrome.google.com/webstore/detail/create-link/gcmghdmnkfdbncmnmlkkglmnnhagajbm?hl=ja

色々な形でリンクの発行ができます。

スシローのデザートのアイスブリュレは、スシローで食べられるものの中で一番美味しい気がします。

ではでは！