Ordinary Life

保護猫【モモ】【ココ】とのいつもの暮らし(旧「がんばれ!わが町名古屋の地域猫&我が家の家ネコ日記」)

WordPressのセキュリティを担保するための施策とリスクを上げてしまう可能性のあるケースなど

PHPの脆弱性云々の話題の中でもらい事故のようにSNSで批判されてしまっているWordPress。本来別の話なのにねぇ..と思いつつ、私が実際に行っている施策を中心に、WordPressで運営しているサイトのセキュリティの状態をできる限り保つ方法を紹介しておこうと思う。

予めお断りしておくが、WordPressはサーバー上で動作するソフトウェアなので、そもそもサーバー自体に問題があったり不正にサーバーアカウントへログインされた場合には防衛は不可能、WordPressの動作にはPHPを始め複数のプログラム言語によって動作や表現をしているものなので、それらの脆弱性を突かれて攻撃されれば無力な場合があるということを承知の上で、あくまでもレンタルサーバー上、WordPressのサイト上でできることを紹介するものなのであしからず。

1.常に最新版で動作させておく

PHPのバージョンは常に最新にしておく

WordPressはPHPという言語を使ってデータベースからデータを引っ張ってきたものをウェブブラウザーで表示するHTMLという言語に書き換えて、いろいろな人から見れる状態にするもの。

PHPという言語は、セキュリティを含め定期的に機能の更新(バージョンの更新)があり、今回のように緊急性のあるセキュリティ対応などもある。

最新バージョンのPHP言語が使えるかどうかは、サイトを収容しているレンタルサーバーの対応状況によりまちまちだが、少なくともPHPにはバージョンがあるということを知り、PHPは更新していくことを知り、PHPのバージョン変更はレンタルサーバーの管理画面から行えることを知っておく必要がある。

そしてできる限り最新のPHPバージョンに切り替えるようにしつつ、サイトが正常に動作するようにしておくことが重要。

特にPHPの先頭の数字が変わるバージョンアップ(例えば5.x→7.x、7.x→8.x)があった時にはWordPressが動作しなくなったり不具合が出たりすることがあるが、常に最新バージョンにしてその時に出た不具合に対処していれば、それほど大きな修正箇所が出ることはない。

他者にWordPressサイトを作ってもらった場合、この説明がされていることがほとんどない。それはPHPのバージョン変更によってWordPressが動作しなくなってサイトの表示ができないなどのトラブルを出さないためという表向きだが、本来は作ってもらう側が分かる、分からないに関わらず説明すべきものであり、それによって発生した不具合に対してどうするのか(保守契約するのか、作ってもらった側自体がメンテナンスをして問題があれば都度料金をもらって対応するのかなど)を契約書等に明記して解決しておくべき事項だと思う。

WordPressを最新の状態に保っておく

どこのバージョンからだったかは忘れたが、WordPressでは最新の状態を保つために、自動更新という機能が導入された。

WordPress本体の更新はダッシュボードメニューの「更新」から、プラグインはプラグイン一覧から、テーマはテーマ一覧からそれぞれ自動更新を有効にするだけで定期的に更新バージョンが存在するかを確認して自動更新してくれる。

前項のPHPバージョンの更新と同じく常に有効にしておくことが正しいのだが、プラグインの仕様が変わって使えていた機能が使えなくなる、表示崩れが起きることがあるなどの理由で有効化していないサイトが多く、それらの脆弱性を突いて攻撃されるケースも少なくない。

また、このWordPressの自動更新機能がサイトの管理画面や表示画面にアクセスがあったことに反応して予約され、更新されるようになっていることをあまり知らない人が多く、サイトを立ち上げたもののアクセスがないようなサイトは放置されたままになることが多く、そうしたサイトを起点に被害に遭うことが多い。

もちろん定期的にサイトの管理画面を開くことで自動更新が走って最新の状態に保つことは可能だが、テスト的に作ったサイトなどは放置されがちなので、サーバーの自動実行機能(cron)を使ってどこからもアクセスがなくても定期的にWordPressの自動更新ジョブを動かすということを、サイトを立ち上げてすぐに設定しておくとよい(cronはまともなレンタルサーバーであれば使えるようになっているので、今使っているレンタルサーバーの機能確認をしてみてほしい)。

自動更新を実行することで先ほど書いたようにいつの間にかサイトの表示がおかしくなったり、使えていた機能が使えなくなってサイトとして不都合が起きたとしても、サイトが乗っ取られたり改ざんされたりするよりはよっぽどマシなのではないかと思うし、常に最新の状態に保ちつつ何等かのサービス提供をしているサイトである日突然..と後日になってから気づくようなサイトは、乱暴な言い方すればさっさと削除して閉鎖したほうがいいとさえ思う。

2.カスタムコードの使用に注意

WordPressは世界中のウェブサイト(ホームページ)の約4割で使用されている有名なサイト運営ツール。

かくいう私も別のサイトでWordPressのカスタマイズに関する情報を発信しているが、世界中に同様の発信をしているサイトが星の数ほどあり、コピーして実行できるようなコードの紹介もされている。

また最近ではAIに何がしたいかを投げれば比較的簡単に機能を実装できるためのコードも入手できるようになった。

これらのコードが安全かどうかというと、実際はそうでもないことが多い。理由としては、コードの中にセキュリティに関する安全策を盛り込んでしまうと、コード自体が長くなり、本来の機能に関するコードの説明に支障が出る場合や、そもそもセキュリティに関しては無知な場合、また、どこかのサイトのコードを使ってとりあえず動いたから自分のサイトでも紹介してしまっているという場合など。

私も最近はAIとコードを書くことも増えたのだが、AIの提案するコードをよく見るとセキュリティを担保するための記述が欠けていることも多い。

よく見かけるプラグインの脆弱性云々よりも実はこうした自身でテーマや自作プラグインなどに追加するカスタムコードの方が、サイトを危険にさらしている場合が多いので、使用する際には自身の知識の限りでセキュリティの状態を保てるようにする必要がある。

こうしたコードは、PHPやWordPressの更新によって使えなくなり、機能しなくなる場合もあるから、特に誰かに作ってもらったサイトは更新しないように言われたり、更新しないようにしてしまったりすることが多いから、ここまで紹介してきたように最新の状態に保ちつつサイトが動作しているかどうかを確認しておくことが重要だろう。

3.セキュリティを保つプラグインに依存しない

WordPressにはセキュリティをアップさせるためのプラグインが無料/有料問わず多数リリースされている。

もちろんそれらを使うことは有用ではあるが、そのプラグインがしていることをきちんと知って導入しているだろうか?

セキュリティ系のプラグインの話ではないが、プラグインの中にはプラグイン作者自身のサービスへの移行をしつこく促すようなものや、サイトの情報をプラグイン作者に筒抜けにするような施策をしたものなどさまざまな問題が出たケースが過去にはある。

だが、便利に見えるセキュリティ系プラグインでそれが全くないといえるかと言えば実はそうではないかも知れない。というのも、多くのセキュリティ系プラグインは開発のために導入したサイトで防御した情報などを知らない間に取得していることが多いからだ。

私は自身で責任をもってサイトのセキュリティを担保しつつ運営しているので、それまではこの種のプラグインを使用してたこともあるが、大抵はインストール時に説明が表示されたり、公式ドキュメントの片隅に統計を取るための記述がひっそりとされているのではないだろうか?

WordPressのプラグインは、もちろんWordPressを便利にするための機能をみんなに使ってもらいたいという純ボランティア精神で無料提供されているものもあれば、その先の自社の有料版を販売するために無料版として提供しているものもあり、多くのセキュリティ系プラグインは後者であることが多い。つまり無料版を導入してもらうことでデータを取り、それを有料版に活かすということをしている場合が多いということ。

これがよりセキュリティの強化につながると考えるのならもちろん使うことに異議を唱えるつもりはないが、データの取得を容認するということは、ややもすればサイトのデータすべてを取得でき得る権限を与えてしまっているのかも知れないということを考えたことはないだろうか?

よく考えて導入することをおすすめする。

4.苦手な機能を実装しない

WordPressはそもそも簡単な操作でサイト側から情報をウェブブラウザーで見られるようにする機能を持つソフトウェア。

それ故インストール時には、大まかに言えば、「投稿」という時系列で日記を公開できるようなブログ機能と、「固定ページ」という時系列でないページを作成できる機能、そしてそれらを管理するためのユーザー管理という機能しか持っていない。

これをプラグインやカスタムコードを使って拡張することで、例えば大規模な会員制のサイトを作ったり、何か物を売って決済をするというような機能を持たせたり、何かの予約を受けたり管理したりする機能を持たせたりすることもできる。

でも先ほど書いた通り、WordPressはそもそも情報を提供するためのソフトウェアで、誰かから情報を受け取るコンテンツとしてはコメント機能位しか設けていない。つまり表向きに外部から何かされる可能性があるのはコメント機能だけ、しかも強力なバリデーション(コードなどが含まれていたら排除したり無害化したりする機能)があったり、登録ユーザーからしかコメントを受け取れないようにしたり、拒否したりする機能があったりして、できる限り外部から何かがされないように工夫されている。

しかし、これを逸脱して、例えば会員制の機能を追加してサイトの画面からプロフィールを編集できたりメッセージを送れたりする機能を追加したら、また、例えば決済用の機能を追加して個人情報やカード情報を受け付けて外部の決済サービスの連携させたら、また、例えば予約機能を作りカレンダーから個人情報を入力して予約を確定させる機能を追加したら..どんどん外部から何かができる可能性のある穴を作ってしまうことになる。

もう一度書こう。そもそもWordPressは簡単な操作でサイト側から情報をウェブブラウザーで見られるようにする機能を持つソフトウェアであり、拡張性の高さ故にいろいろなことができてしまうのだが、それは同時にリスクを拡大することにつながりかねないということを認識しておく必要がある。

そしてWordPressは基本的に1つのサイトに対して1つのデータベース(データを保存する箱)に接続してデータのやり取りをする。会員制サイトであれば当然そこにデータを保存することとなり、決済サービスでは個人情報+クレジットカード情報などをそこに保存した上で外部の決済サービスとの連携を取ることになる。予約機能も然り。

ここまで書いてきたサーバーのセキュリティやWordPressのセキュリティを突破され、データベースそのもののデータが抜き取られてしまえば..もう答えはお分かりだろう。改ざんやデータ搾取の被害に遭っても影響がないように設計すべきであり、当初の機能にない苦手なことはさせるべきではないと思う。

以上、WordPressのセキュリティと言うと、パスワードを難解なものにするとか、ユーザー名を隠すとか..WordPressの上にあるものに対する対策が紹介されがちだが、このページを見て、実はPHPとWordPressを最新に保つところからすべてが始まるというのを理解してもらえるとうれしい。

ちなみにこれらサーバー側、ソフト側の更新はWordPressに限ったことではなく、レンタルサーバーにインストールするサイト作成ツール(ソフトウェア)すべてに同様のことが言える。

そこでしきりに紹介されているのが、そもそもレンタルサーバーにソフトをインストールして使うという発想ではなく、それらのメンテナンスがされているサービス上でサイトを作るというもの。

いわゆる定額料金を払えば機能や安全が担保されるという、いわゆるサブスクリプション式で一見便利なように見える。

ただ裏側は、例えば紹介することでインセンティブを得られる(いわゆるアフィリエイト)から紹介しているだけで実は使用したこともなければそのサービスを利用したこともないというケースも多いし、それらのサービスからレンタルサーバー+WordPressのような独立した形態に戻そうとした時に、そのサービスで作成したコンテンツ(データ)を移行できなくしていたりするものも多いので、安易にそれらを使うことは個人的にはおすすめしないというのを最後に沿えておく。

コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

※リンクやURLの挿入されているコメントは無視します