Kaciy Discovery

自作ソフトウェアの配布、プログラミング、セキュリティ、などを書いていきます。現在は別のブログから記事を移行中です。

WordPressのセキュリティ対策の方法

Yahoo!ブログやはてなブログなどのブログサービスを利用している場合は、ブログサービス側が脆弱性などのセキュリティ対策を全て行ってくれているので、アカウント情報の漏洩さえ気をつけていればセキュリティ対策を気にする必要はありません。

ですが、WordPressを利用してウェブサイト(ブログも含む)を作成している場合、全てのセキュリティ対策を自分で行う必要があります。

脆弱性があるとウェブサイトが不正に書き換えられるなどの可能性が高まります。時間をかけて作成したのに書き換えられてしまうのは誰でも嫌だと思います。さらに、マルウェアを仕込まれるなどされれば閲覧した際にマルウェアに感染する可能性もあり、閲覧者に迷惑をかけてしまいます。WordPressプラグインなどには脆弱性が存在している場合があり(ほとんどと言っていいと思います)、修正された場合は手動で更新する必要があります。

さらに、WordPressの仕様によるセキュリティ問題などがあり、それらの問題を解決する必要があります。そこで、一部ですがセキュリティ対策の方法を紹介します。

様々なウェブサイトで紹介されているセキュリティ対策を調べて、それらを総合的に判断して、効果があるのかなども書いています。

私が良く分かっていない部分があり、ネット上の情報を参考にしているので一部間違っている可能性があります。

 

 

パスワードを長くしたり推測されにくい文字列にする

いろいろなパスワードを試されればいつかは一致して不正に侵入されてしまいます。パスワードが短かったり推測されやすい文字列だと短時間でログインされてしまう可能性が高まります、長くしたり推測されにくくすることで時間をかけさせることができます。時間がかかれば途中で諦めたり、時間をかけてもパスワードが分からなかったりするので、侵入されにくくなったり侵入されない可能性が高まります。

「12345」のようなパスワード(文字列)だと推測されやすいので、高い確率で侵入されてしまいます。簡単なパスワードは一覧として用意していてまずはそれから試していくので(違う場合もある)、すぐに侵入されてしまいます。

パスワードは長くしたり推測されにくくすることが重要です。

変更方法は、「ユーザー」-「あなたのプロフィール」を開き、「新しいパスワード」でパスワードを変更することができます。

 

最初からある「admin」ユーザーは削除

「admin」は最初からあるのでこれを削除していないと、ログイン時のユーザー名は分かってしまっている状態です。あとはパスワードが分かればいいだけなので、侵入が簡単になってしまいます。

「admin」ユーザーを削除することで侵入されにくくなります。

削除方法は、「ユーザー」-「ユーザー一覧」を開き、「admin」を削除します。

 

ニックネームとブログ上の表示名を変更する

標準ではブログ上に投稿者名が表示された状態です。ですが、これだとログイン時のユーザー名と同じなので、あとはパスワードが分かってしまえばログインされてしまいます。

そこで、ニックネームを変更してブログ上の表示名を変更することで、ユーザー名を分からないようにして侵入されにくくすることができます。

変更方法は、「ユーザー」-「あなたのプロフィール」で「ニックネーム」と「ブログ上の表示名」を変更します。ブログ上の表示名はニックネームと同じにします。

 

投稿者名を非表示にする

WordPressに登録しているユーザー名でログインできてしまいますが、何も対策をしていないと記事にユーザー名(投稿者名)が表示されています。そこで表示されないようにすることで多少の対策にはなります。複数人で記事を書いているのであれば表示していたほうが良いかもしれませんが、一人で管理しているのであれば表示しなくてもい良いと思います。

「外観」-「カスタマイズ」でCSS

**********************************

nspan.author { display:none; }

**********************************

を追加することで非表示にすることができます。ただし、テーマによっては非表示にならないようですし、非表示になっているだけでHTMLのソースコードを見れば投稿者名は分かってしまいます。セキュリティ上の効果はないのでしなくていいです。

もう一つ方法があります。「外観」-「テーマの編集」でPHPの投稿者名を表示する部分を消すことでソースコードからでも分からないようにすることができます。

テーマによって違うかもしれませんが(無い場合もある)「functions.php」の「//Post author」の下の「if」文を削除またはコメントアウトします。ソースコードはバックアップしておくことをお勧めします。「index.php」の場合もありテーマによって違うようです。

個別に非表示にする場合は、「page.php」、「single.php」、「content.php」、などを編集します。「get_post_type()」がある部分です。ただし、この方法だと投稿日も表示されなくなってしまうので、そうならないようにする必要があります。

 

Edit Author Slugを使用する

URLの後ろに「?author=数字」を入れると(「1」から順に入れてみる)ユーザー名が表示されたページが開いてしまいます。

プラグインの「Edit Author Slug」を使用すると、投稿者アーカイブに表示される名前を任意の名前に変更することができます。

ですが、変更しても調べる方法はあるのでこれだけでは不十分で、他の対策も行う必要があります。

 

ログイン時のユーザー名をメールアドレスだけしか受け付けないようにする

WordPressはログイン時に登録しているユーザー名(投稿者名)を使用することができますが、メールアドレスも使用することができます。ですが、何もしない状態だとユーザー名(投稿者名)は記事部分に表示されているなど、公表された状態になってしまっています。これだとあとはパスワードが分かればログインできてしまいセキュリティ的に良くありません。

表示されるユーザー名を変更したり隠すことはできますが、ネット上の情報では調べる方法はあり完全に分からないようにすることはできないようです。私は詳しくないので分かりませんが...。

そこで、ログイン時のユーザー名を自分だけが知っている(WordPressだけで使用する)メールアドレスだけしか受け付けないように制限することで、メールアドレスが漏れないかぎり基本的に不正にログインされることはありません。

この対策をすれば投稿者名を表示していたりしても、断定はできませんが問題はないと思います。

プラグインの「Force Email Login」を使用します。

 

ログイン試行回数を制限

ユーザー名やパスワードをいろいろ試して不正にログインしようとする攻撃(ブルートフォースアタック)を防ぐには、何度もログインを試そうとしている場合はアクセスを制限することが有効です。

レンタルサーバーに機能が付いている場合があるので、あればその機能を利用するといいです。

もしレンタルサーバーに機能が無い場合はプラグインを使用します。「All In One WP Security & Firewall」に機能があります。

 

コメントやトラックバックを制限

コメントには危険なウェブページへのリンクを張られるなど、コメントやトラックバックは悪用されることがあります。例えば、もし閲覧者が悪意のあるページへのリンクを押して開いてしまうと、その人が被害に遭う可能性があります。

大量にコメントやトラックバックが行われた場合に制限することで、大幅に減らすことができます。

さらに、国外IPアドレスの制限をすることで、国外IPアドレスからはコメントやトラックバックができないようにできます。ただし、これだと国外からのコメントが制限されてしまうので、国外からのコメントも拒否したくない場合は国外IPアドレスの制限は使用できません。

レンタルサーバーにはこれらを制限する機能があるところがありますが、国外IPアドレス制限しかできないなどで使いづらくなっています。プラグインだと国外IPアドレス以外の制限もでき、細かい設定ができたりするのでプラグインを使用する方がいいかもしれません。

スパムコメントに関しては「Akismet」などのプラグインで対策ができます。

 

WordPressやテーマやプラグインは最新版に更新

WordPressやテーマやプラグインには脆弱性が発見されることがあり、発見されると基本的に修正されます。脆弱性を放っておくとそこが狙われ不正に侵入されたり書き換えられるなどの可能性が高まります。

更新がある場合は更新メッセージが表示されます。ボタンを押すだけで更新できるので簡単です。プラグインを更新する時は停止させてから行ってください。

これは特に重要なので必ず更新してください。他の対策を全て行っても脆弱性があれば攻撃を防げない可能性が高いからです。

 

テーマやプラグインWordPress公式サイトで公開されているものを使用する

WordPress公式サイトで公開されているテーマやプラグインは、調べられて審査に通ったものが公開されているので、悪意のあるコードが含まれている可能性は低く安全性は高いです。

WordPress公式サイトで公開されていないものは、悪意のあるコードが仕込まれているなどの可能性があるのであまりお勧めはできません。使用する場合は評判などを調べてからのほうがいいです。

 

バージョン情報を削除

バージョン情報が分かると脆弱性のあるバージョンなのか、どんな攻撃をすればいいのかを判断しやすくなってしまいます。

バージョン情報を削除することである程度はセキュリティ対策になります。ですが、攻撃してみれば分かることなのであまり効果はないと私は思います。

プラグインの「All In One WP Security & Firewall」を使用すれば簡単に削除できます。

手動でもできますが、よく分からないのであればプラグインを使用したほうが良いでしょう。

バージョン部分を削除してもいいですが、コードを追加することでもできます。「ここ」で紹介されているのでこちらを見てください。

 

「wp-config.php」のアクセスを禁止する

「wp-config.php」にはユーザー名やパスワードなどの重要情報が含まれています。これをアクセス禁止にすることでセキュリティを高めることができます。

.htaccess」ファイルに下のコードを追加します。

********************************

<files wp-config.php>
order allow,deny
deny from all
</files>

********************************

詳しくは「ここ」を見てください。

ただし、レンタルサーバー側で対策されている場合もあるので、その場合はしなくていいです。もしこれをやると問題が発生する可能性があります。サーバー側で対策されていなくても「.htaccess」を変更すると問題が発生する可能性があるので、バックアップを取ってから編集することをお勧めします。

一部では、「wp-config.php」にアクセスしてもソースコードは表示されないので重要情報は漏れることはないとの意見もあります。ただし、脆弱性があれば取得できてしまう可能性があり、私はしなくても問題はないけど、セキュリティをより高めたいのであればしてもいい程度だと思います。何らかの問題があればアクセス制限をしても意味がないようなので、あまり効果がないと言ってもいいかもしれません。

 

データベースのテーブル名のプレフィックス(接頭辞)を変更する

初期状態だとテーブル名のプレフィックスは「wp_」となっていますが、これだとテーブル名が分かってしまいセキュリティ的にはあまり良くありません。そこで、プレフィックス(wp_)を変更することでセキュリティを高めることができます。

プラグインの「All In One WP Security & Firewall」に変更する機能が付いています。

プレフィックスの変更はレンタルサーバーなどの相性によっては問題が発生する可能性が高い?ようなので、バックアップを取ってから変更することをお勧めします。もし問題が発生した場合は無理に変更せずそのままにしてください。

 

ログイン画面や管理画面(ダッシュボード)にアクセス制限をする

ログイン画面や管理画面へのアクセスを特定のIPアドレスだけを許可するようにすることでセキュリティを高めることができます。IPアドレスはそれぞれのコンピュータ(パソコンやスマートフォンなど)に割り当てられたアドレス(住所)で、同じアドレスを持ったコンピュータはありません。特定のコンピュータからしかアクセスできないようにすることで、他のコンピュータからはアクセスできなくなるので高いセキュリティを確保できます。

他のコンピュータでアクセスしたくてもできないので不便になりますし、コンピュータが故障するなどで買い替えた場合などは困ることになります。知識や調べることができるのであれば対処できますが、自信がないのであれば制限しないほうが良いかもしれません。

プラグインの「All In One WP Security & Firewall」に制限する機能が付いています。

国外IPアドレスのアクセス禁止に関しては、レンタルサーバーに機能が付いている場合があるのでそれを使用してもいいと思います。

 

二段階認証、ワンタイムパスワード、画像認証、を利用する

二段階認証はメールで送られてくるセキュリティキーを入力することで、不正ログインの可能性を減らすことができます。

ワンタイムパスワードは一度しか使用できないパスワードのことで、パスワードが漏れたとしても次にログインする時のパスワードが変わっているので、不正ログインの可能性を減らすことができます。

画像認証は崩れた文字を入力することでプログラムで自動入力されないようにすることができます。ただし、最近は判別できる技術があるので、どの程度効果があるかは微妙です。最近は標識などの特定の場所を選択するような画像認証もあるので、最新の画像認証の方式を利用したほうが良いでしょう。

これらはブルートフォースアタック攻撃に有効で、プラグインを使用する必要があります。いろいろ調べてみて自分に合ったものを選べばいいです。

プラグインの「All In One WP Security & Firewall」にあります。他にも多くのプラグインがあるので自分に合うものを選べばいいです。

 

ログイン画面と管理画面(ダッシュボード)をTLS(SSL)化する

ログイン画面や管理画面はユーザー名やパスワードなどの特に重要な情報も送受信しています。TLS化(URLの先頭がhttps)することで暗号化して送受信することができます。もし暗号化して通信しない場合は、傍受された時に確実に情報が漏れてしまいます。レンタルサーバーによってはTLS機能があるので(ログイン画面と管理画面のみ)、レンタルサーバー側の設定を変更します。SSLと表記されている場合がほとんどだと思います。SSLは古い規格で最近はTLSが使われているので正確にはTLSなのですが、あまり広く知られていないのでSSLが使われることが多いようです。

レンタルサーバーに機能が無い場合は自分でTLS化する必要があります。自分でできない場合はTLSに対応したレンタルサーバーに変更したほうが良いです。

TLS化は特に重要なので必ず行ってください。

 

Index of (ディレクトリ一覧) ページが表示されないようにする

Index ofページが表示される場合はどこにどのようなファイルがあるのか分かってしまうので、セキュリティ的に良くありません。表示されないようにする必要があります。存在しないページ(URL)を開いてみてIndex ofページが表示された場合は表示されないようにする必要があります。

レンタルサーバー側で対策されている場合があり、その場合は何もしなくていいです。最近は多くのレンタルサーバーで表示されないようになっているようです。

.htaccess」ファイルに「Options -Indexes」を追加、又は「Options 」がある場合は「-Indexes」に変更することで表示されないようにできます。複数の方法があり、サーバーによってできるできないがあるようなので、検索して調べたりレンタルサーバーの説明書を見るなどした方がいいでしょう。

 

セキュリティプラグインを使用する

多くのセキュリティプラグインがあり、様々なセキュリティ対策ができます。

ただし、複数のセキュリティプラグインを使用すると問題が起こる可能性が高くなります。パソコンで複数のセキュリティソフトを使用してはいけないのと同じことです。ただし、使用しているプラグインに同じ機能が無い場合は基本的に問題ないと思います。そこで、お勧めのプラグインだけを紹介します。

「SiteGuard WP Plugin」は不正ログイン対策に絞ったセキュリティプラグインで簡単に使えます。

「All In One WP Security & Firewall」は総合的に対策ができるプラグインで、ある程度の知識がないと使うのは難しいです。

この2つはどちらか1つだけ使用してください。

「Force Email Login」は上でも紹介しましたが、ログイン時のユーザー名をメールアドレスだけ受け付けるようにするプラグインです。

注意としては、セキュリティプラグインレンタルサーバーや他のプラグインなどとの相性によっては深刻な問題が発生する可能性が高いです。必ずバックアップを取ってから使用してください。

動作負担が大きい場合があり、レンタルサーバーの性能などによっては使用しないほうが良い場合があります。

 

パーミッションの設定

ネットで調べるとパーミッションの設定を説明しているウェブサイトがありますが、基本的にレンタルサーバー側で対策されているはずなので意識する必要はありません。

セキュリティ意識の低いレンタルサーバーだと対策されてない場合があるかもしれないので、その場合は自分で対策する必要があります。

問題が発生する可能性が高いようなので設定する場合は注意が必要です。

 

レンタルサーバーのセキュリティ機能を使用する

レンタルサーバーには標準でセキュリティ機能が付いています。

すでに紹介しましたが、ログイン試行回数制限などです。レンタルサーバーには紹介した機能以外にもいくつかのセキュリティ機能があり、どのような機能があるのか確認しておくといいでしょう。

プラグインを使用してもいいですが、相性などの関係もあるので極力レンタルサーバーの機能を使用したほうが良いかもしれません。

 

最後に

セキュリティ対策を紹介しましたが、徹底的にやっても完全に防げるわけではありません。バックアップを取るなどをして何があっても元に戻せるようにしておくことが重要です。

これらの対策を全て行う必要はありませんが、特に重要な対策だけでもしておいたほうが良いでしょう。