第25回 セキュリティとバックアップ

事前準備

  • https://icc.firstelement.co.jp/ を開こう。
  • 「Local」を立ち上げて、icc-booksの左側のグレーの三角をクリックしてサイトを起動し、Localの右端にあるADMINボタンをクリックしてWP管理画面にログインしよう。

前回のおさらい

ECサイト構築に必要な周辺のこと

  • 「特定商取引法に基づく表記」ページを用意
    • 「特定商取引に関する法律」第11条
    • WooCommerceに専用欄が用意されるので入力
  • 「プライバシーポリシー」ページを用意
    • 「個人情報保護法」に定められている
    • 固定ページが下書きの状態で用意されている
  • 決済代行会社との契約
    • カード決済/コンビニ決済/キャリア決済など導入する場合は別途、決済代行会社と契約する
    • WooCommerceと連携させる決済プラグインを追加で導入
  • 配送会社/物流倉庫(フルフィルメント)と契約
  • インターネットバンキング
    • Web/メール/アプリで入金確認できるので便利

WooCommerceの設定(続き)

  • 送料の設定
    • 「配送地域」 ×「 配送クラス」の掛け合わせで送料が決まる
      • 「配送クラス」には「60サイズ」など梱包サイズを設定
      • クロネコヤマトなど利用する配送会社の料金表など参考にする
  • 商品に送料の設定を反映させる
    • 梱包サイズを指定する(60サイズなど)
  • 決済の設定
    • 銀行振込の場合
    • PayPal(クレジットカード決済)の場合
      • PayPal管理画面にてAPI情報を発行する
      • WooCommerce側で、発行されたAPI情報を入力
  • WooCommerceが自動生成した関連するページ(カートなど)をメニューに追加
  • テスト注文
    • カートに入れる
    • カートの中身をみる
    • お支払いへ進む
    • 注文者情報を入力
      • 送料がリアルタイムに計算される
    • 決済方法を選択
      • PayPalを選んだ場合はPayPalの画面が開くが今回は銀行振込を選択
    • 注文完了の表示
      • 「マイアカウント」ページに移動すると、今注文した内容のステータスが「保留中」となっている
    • Mailhogで注文明細メールが届いていることを確認
      • メール文面に振込先口座が書かれている
        • 商品代金を振り込むことができる
        • 名字が書かれていない、など不具合がある→メールテンプレートの修正が必要
  • 管理者宛の注文通知メールも届いている
  • WP管理画面から注文内容を確認
    • ステータスを「支払い待ち」に更新
    • マイアカウントでステータスを確認すると「支払い待ち」に更新されている
  • 入金があったと仮定し、ステータスを「処理中」に更新
    • マイアカウントでステータスを確認すると「処理中」に更新されている
    • Mailhogを確認すると「現在処理中です」というメールが届いている
  • 発送が完了したと仮定し、ステータスを「完了」に更新
    • マイアカウントでステータスを確認すると「完了」に更新されている
    • Mailhogを確認すると「注文が完了しました」というメールが届いている
  • 商品到着を待つ
  • (マイアカウントからいつでも過去の注文履歴を確認できる)

↓↓↓

ECサイトに必要なひと通りの機能を
WordPress + WooCommerceを使えば実現できる!

セキュリティは他人事ではない

以下のいずれかorすべてを放置した場合、サイトが改ざんされる確率はかなり高い

  • WordPressのコア(本体)をアップデートせず放置
  • プラグイン/テーマをアップデートせず放置
  • パスワードの使いまわし
  • サイトがSSL/TLSに対応していない
  • FTPの不適切なパーミッション設定

私自身も(記憶にある限り)過去4回、サイトが改ざんされた

  • 2回は(たぶん)プラグインのセキュリティホールがきっかけ
  • 1回は(たぶん)FTPの不適切なパーミッション設定
  • 1回は(たぶん)設置していた他のアプリケーションのアップデート放置

どのように対応すべきか?:
「絶対に安全な方法」はない…「やるべき」とされていることは一通りやり、自動バックアップを設定する。

やるべきこと(私がやっていること)9選:

  1. WordPressコア/プラグイン/テーマいずれも自動アップデート(※)を設定
  2. 使わないプラグインやテーマは放置せず削除
  3. プラグインを使用して自動バックアップを設定する
  4. パスワードは使い回さず、サイトごとに自動生成しブラウザに記憶させる
  5. セキュリティ系プラグインを設置
  6. レンタルサーバー側のセキュリティ機能を有効化
  7. SSL/TLSを設定
  8. FTPで各ファイル/フォルダに適切にパーミッションが設定されていることを確認
  9. wp-config.phpファイルを一般からは1つ上の階層(=public_htmlの1つ上)に移動し、Web公開領域の外に置く

WordPressコア/プラグイン/テーマいずれも自動アップデートを設定

  • WordPressコアは、デフォルトはマイナーなアップデートは自動アップデートされる
    • (※)メジャーアップデートは手動
      • 使用中のプラグインの対応状況を確認し、手動アップデート実行
  • プラグインはデフォルトは手動アップデート
    • 特に理由がないかぎり自動アップデートを設定する
      • プラグインファイルを直接カスタマイズするとアップデートで上書きされてしまう
        • アクション/フィルターフックを使ってテーマのfunctions.phpにカスタマイズ内容を記述、または外部プラグイン化していれば問題ない
        • 大きな機能変更があった場合は不具合が起こる可能性あり
          • その場合もバックアップを取っていればすぐに戻せる
    • 自動アップデートの設定は別紙参照
  • テーマはデフォルトは手動アップデート
    • 特に理由がないかぎり自動アップデートを設定する
      • 親テーマを直接カスタマイズするとアップデートで上書きされてしまう
        • 子テーマをつくり必要な箇所のみオーバーライドしていれば問題ない
        • 大きな機能変更があった場合は不具合が起こる可能性あり
          • その場合もバックアップを取っていればすぐに戻せる
    • 自動アップデートの設定は別紙参照

参考)プラグインとテーマの自動更新 – WordPress 日本語
https://ja.wordpress.org/support/article/plugins-themes-auto-updates/

参考)WordPressの自動更新(バックグラウンド更新)機能を徹底解説 – Kinsta
https://kinsta.com/jp/blog/wordpress-automatic-updates/

注意)有償プラグインは自動アップデートに対応していないことが多い。手動で対応。

使わないプラグインやテーマは放置せず削除

  • プラグインを「有効化」していなくても改ざんされる恐れあり
    • 使用しないとなるとアップデートも放置しがち
      • 脆弱性の温床
  • 使用していなくても、プラグイン/テーマのアップデート確認のために負荷もかかる
  • 使わないプラグインやテーマは削除する

プラグインを使用して自動バックアップ

  • バックアップの保存先は、サーバーの外部に置くのが安全
    • 同じサーバー上に保存すると、クラックされた場合にバックアップデータも感染している可能性もある。またサーバー自体が何らかの理由ですべてデータが飛ぶ可能性もある(バックアップの意味がなくなる)。
    • DropboxやGoogle Driveなどクラウドストレージが便利
  • 自動バックアップの設定は別紙参照

パスワードは使い回さず、サイトごとに自動生成しブラウザに記憶させる

パスワードを複数のサイトで使いまわしていると、漏洩したときにパスワードリスト攻撃に合う可能性がある:

  • サイトAAAとサイトBBBで同じパスワードを使用していた
    • サイトAAAがクラッカーCCCにクラックされてパスワード漏洩
      • クラッカーCCCはサイトAAAから入手したID/パスワードの組み合わせで様々なサイトを総当り攻撃。
      • 結果、サイトBBBに不正ログイン成功
  • 自分のメールアドレスやTELが漏洩しているか確認できるサイト:

参考)Adobe社から流出した1億5千万のパスワードから分かること – プライバシーマーク・ISMSナビ
https://www.pmarknews.info/archives/51920307.html

パスワードは使い捨て。自動生成した/されたものをブラウザに記憶させる。

サイトによっては、ユーザー登録時/パスワード再発行時にランダムで複雑なパスワードが自動生成されるので、それをブラウザに記憶させて使用する。パスワード管理機能からいつでも確認できる:

Google Chromeのパスワード管理画面
出典:「Google Chrome 69」新機能探訪 ~“強いパスワード”をその場で生成、管理もお任せ!
https://forest.watch.impress.co.jp/docs/serial/yajiuma/1147911.html

手動で乱数を自動生成する方法:
パスワード・乱数 自動生成
https://tomari.org/main/java/password.html

セキュリティ系プラグインを設置

「SiteGuard WP Plugin」「WP Cerber Security, Anti-spam & Malware Scan」「Wordfence Security」などが有名。とくにSiteGuard WP Pluginは国産で有名なセキュリティ会社が提供しているので信頼できる。設定は省略。

レンタルサーバー側のセキュリティ機能を有効化

WordPressのセキュリティを高めてくれる機能や「WAF」など、大抵のレンタルサーバーには備わっているので利用する。

「エックスサーバー」のコントロールパネル > WordPressセキュリティ設定 の画面

SSL/TLSを設定

サイトにアクセスしたときに、ブラウザのアドレス欄の先頭に鍵マークが付いているサイトはSSL/TLSが適切に設定されている。この状態だと、ユーザーのブラウザとサーバー間は暗号化されているので、ECサイトで入力するカード情報などは暗号化されて送られるので安全。メールフォームやWordPress管理画面にログインするときのパスワードなども暗号化される。

SSL/TLSとは(Webに限らず)データを暗号化して送受信する仕組み。ウェブ通信のためのプロトコル「http://」にSSL/TLSを導入していることを表すのが「https://」。httpsの「s」は ”セキュア” の “s”。ページ内のコンテンツにhttpsでないコンテンツを含んでいたり証明書の有効期限が切れていると鍵マークが斜線が付いてSSL/TLS通信が出来ていないことを表すので注意。

  • サイト制作の途中でSSL/TLSの設定をした場合は、導入前にアップロードした画像などは「http://」になっているので鍵がかからない。
    • 「http://」になっているすべての記述を「https://」に直す必要がある。
      • 最初からSSL/TLSを導入すればそのような面倒はない

SSL/TLS(の証明書)には無料〜高額(セコム、GMOなど)のものまでいろいろとある。最近は無料で取得できる証明書(Let’s Encrpt)が広く使われるようになった。

「エックスサーバー」の無料SSL/TLS設定画面。設定して1時間ほどすれば使用できるようになる。

最近のブラウザは、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の重要な設定ファイル。これを外部の人に見られてしまうと、SNSやECサイトなど多数のユーザー情報を抱えるサイトにおいては、個人情報が漏洩する恐れがある。

「wpXシン・レンタルサーバー」の場合、Web公開領域である「public_html」より1つ上の階層にwp-config.php ファイルを移動する。1つ上の階層にあっても動作するようにWordPressは設計されている。一般ユーザーを含めクラッカーも「public_html」の外にはアクセスできないので、より安全になる。

画像などと違い、wp-config.phpファイルは閲覧者がアクセスできる必要はないので、パーミッションは「600」または「400」などに設定する。

以上

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x