Contents
セキュリティは他人事ではない
以下のいずれかorすべてを放置した場合、サイトが改ざんされる確率が高い
- WordPressのコア(本体)をアップデートせず放置
- プラグイン/テーマをアップデートせず放置
- パスワードの使いまわし
- サイトがSSL/TLSに対応していない
- FTPの不適切なパーミッション設定
私自身も(記憶にある限り)過去4回、サイトが改ざんされた
- 2回は(たぶん)プラグインのセキュリティホールがきっかけ
- 1回は(たぶん)FTPの不適切なパーミッション設定
- 1回は(たぶん)設置していた他のアプリケーションのアップデート放置
どのように対応すべきか?→
「絶対に安全な方法」はない。「やるべき」とされていることは一通りやり、自動バックアップを設定する。
やるべきこと(私がやっていること)9選:
- WordPressコア/プラグイン/テーマいずれも自動アップデート(※)を設定
- 使わないプラグインやテーマは放置せず削除
- 自動バックアップを設定する(プラグインを使用)
- パスワードは使い回さず、サイトごとに自動生成しブラウザに記憶させる
- セキュリティ系プラグインを設置
- レンタルサーバー側のセキュリティ機能を有効化
- SSL/TLSを設定
- FTPで各ファイル/フォルダに適切にパーミッションが設定されていることを確認
- wp-config.phpファイルを一般からは1つ上の階層(=public_htmlの1つ上)に移動し、Web公開領域の外に置く
使わないプラグインやテーマは放置せず削除
- プラグインを「有効化」していなくても改ざんされる恐れあり
- 使用しないとなるとアップデートも放置しがち
- 脆弱性の温床
- 使用しないとなるとアップデートも放置しがち
- 使用していなくても、プラグイン/テーマのアップデート確認のために負荷もかかる
- 使わないプラグインやテーマは削除する
パスワードは使い回さず、サイトごとに自動生成しブラウザに記憶させる
パスワードを複数のサイトで使いまわしていると、漏洩したときに「パスワードリスト攻撃」に合う可能性がある。
- 複数のWebサービスで同じパスワードを使用していた
- WebサイトAが攻撃者にクラックされてパスワード漏洩
- 攻撃者はWebサイトAから入手したID/パスワードの組み合わせで様々なサイトを総当り攻撃。
- 結果、WebサイトBまたはWebサイトCに不正ログイン成功
- WebサイトAが攻撃者にクラックされてパスワード漏洩
- 自分のメールアドレスやTELが漏洩しているか確認できるサイト:
- ‘;–have i been pwned?
- https://haveibeenpwned.com/
参考)Adobe社から流出した1億5千万のパスワードから分かること – プライバシーマーク・ISMSナビ
https://www.pmarknews.info/archives/51920307.html
自動生成した/されたものをブラウザに記憶させる
サイトによっては、ユーザー登録時/パスワード再発行時にランダムで複雑なパスワードが自動生成されるので、それをブラウザに記憶させて使用する。ブラウザのパスワード管理機能からいつでも確認できる。
ログインが必要なサイトに初めてログインした直後に、画面右上にこのような画面が表示されることがある。自分のパソコンからログインした場合は「保存」をクリックする(公共の場のパソコンの場合は保存しないように)。
Microsoft Edgeのパスワード管理画面
出典:【Microsoft Edge】保存したパスワードを確認、削除、無効化する方法【簡単まとめ】
- Edgeの画面右上の三点ドットのメニューをクリック
- プルダウンメニュー下部の「設定」をひらく
- プロファイル > パスワード をクリック
- これまでに保存したサイトとID/PASSの組み合わせを確認できる(更新/削除もできる)
複雑なパスワードを自分で考える必要がある場合
手動で乱数を自動生成する方法:
パスワード・乱数 自動生成
https://tomari.org/main/java/password.html
セキュリティ系プラグインを設置
「WP Cerber Security, Anti-spam & Malware Scan」「Wordfence Security」「SiteGuard WP Plugin」などが有名。
- https://wpcerber.com/installation/ にアクセス
- 公式プラグインディレクトリからの配布ではないが、私(宮澤)がよく使っていて、信頼できるプラグインであると判断。
- 画面中段のzipファイルをダウンロード
- WordPress管理画面にログインし、プラグイン新規インストール画面をひらく
- 画面上部「プラグインのアップロード」をクリック
- 先にダウンロードしたzipファイルを指定
- プラグインを有効化
設定については下記画像を参照:
レンタルサーバー側のセキュリティ機能を有効化
WordPressのセキュリティを高めてくれる機能や「WAF」など、大抵のレンタルサーバーには備わっているので利用する。
「エックスサーバー」のコントロールパネル > WordPressセキュリティ設定 の画面:
SSL/TLSを設定
サイトにアクセスしたときに、ブラウザのアドレス欄の先頭に鍵マークが付いているサイトはSSL/TLSが適切に設定されている。この状態だと、ユーザーのブラウザとサーバー間は暗号化されているので、ECサイトで入力するカード情報などは暗号化されて送られるので安全。メールフォームやWordPress管理画面にログインするときのパスワードなども暗号化される。
SSL/TLSを利用するには
- Webサーバー(レンタルサーバー)にてサイトごとに設定する
- レンタルサーバーのコントロールパネル(管理画面)にて「SSL設定」などから設定する
- 1時間程度待つと反映され、これまで http://example.jp でアクセスしたのを https://example.jp でアクセスすると、ブラウザのアドレス欄に鍵マークが表示され、SSLでアクセスできていることが確認できる。
SSL/TLSとは(Webに限らず)データを暗号化して送受信する仕組み。ウェブ通信のためのプロトコル「http://」にSSL/TLSを導入していることを表すのが「https://」。httpsの「s」は ”セキュア” の “s”。ページ内のコンテンツにhttpsでないコンテンツを含んでいたり証明書の有効期限が切れていると鍵マークが斜線が付いてSSL/TLS通信が出来ていないことを表すので注意。
SSL/TLS(の証明書)には無料〜高額(セコム、GMOなど)のものまでいろいろとある。最近は無料で取得できる証明書(Let’s Encrpt)が広く使われるようになった。
- サイト制作の途中でSSL/TLSの設定をした場合は、導入前にアップロードした画像などはアドレスが「http://」になっているので鍵がかからない。
- 「http://」になっているすべての記述を「https://」に直す必要がある。
- 最初からSSL/TLSを導入すればそのような面倒はない
- 「http://」になっているすべての記述を「https://」に直す必要がある。
最近のブラウザは、https化されていないサイトにアクセスすると警告が表示されるようになった。
Googleはユーザー保護の観点から、httpsに未対応のサイトは検索順位が下がる可能性があると発表した。
参考)SSL/TLSとは? 概要と仕組みを簡単説明 – GMOグローバルサインカレッジ
https://college.globalsign.com/ssl-pki-info/ssl-tls/
FTPで各ファイル/フォルダに適切にパーミッションが設定されていることを確認
コードエディタ「Nova」でサーバー上の「wp-content」ディレクトリの詳細を表示した様子。
ユーザー(オーナー)、グループ、その他(一般)ごとに権限が設定できる。
読み = 4 書き = 2 実行 = 1
ユーザーは読み/書き/実行ができるので
4 + 2 + 1 = 7
グループは読み/実行のみなので
4 + 1 = 5
その他は読み/実行のみなので
4 + 1 = 5
結果、このディレクトリのパーミッションは
「755」に設定されている。
参考)【パーミッション】WordPressセキュリティ対策 – OUSHIN
https://ou-shin.co.jp/support05/
参考)パーミッション – エックスサーバー
https://www.xserver.ne.jp/manual/man_server_permission.php
wp-config.phpファイルを1つ上の階層(public_htmlの1つ上)に移動し、Web公開領域の外に置く
wp-config.phpはデータベースへの接続情報などが書かれたWordPressの重要な設定ファイル。これを外部の人に見られてしまうと、サイトが改竄されたり個人情報が漏洩する恐れがある。
wp-config.phpファイルは1つ上の階層にあっても動作するようにWordPressは設計されているので、Web公開領域である「public_html」より1つ上の階層にwp-config.phpファイルを移動する。一般ユーザーを含め攻撃者も「public_html」より上位には(直接は)アクセスできないので、より安全になる。
画像などと違い、wp-config.phpファイルには閲覧者がアクセスできる必要はないので、パーミッションは「600」または「400」など管理者(≒WordPress)のみ読み取り可能に設定する。
以上