WelcartによるECサイト運営での懸念点として、セキュリティ問題が挙げられるかと思います。
この記事では、Welcart導入に際してのセキュリティ対策についてまとめてありますので、ご参考にしてください。
Welcart自体というよりは、WordPressのセキュリティ強化を行います。
システムの更新
基本対策となりますが「WordPress本体・テーマ・プラグイン・PHP」を最新のバージョンに保つよう更新しましょう。
Welcartも時折、脆弱性が見つかりますので、常に最新版になるよう更新しましょう。
また、古いPHPはセキュリティサポートが終了していますので、バージョン更新が必要ですが、Welcartの最新バージョンが「PHP 7.4」までの対応となっていますのでそれを踏まえたバージョン設定が必要となります。
2022年10月 追記:Welcart 2.8 からPHP8.0に対応いたしました。
その他の基本的な対策
- サイト全体を常時SSL化する【必須】
- 不要なテーマ・プラグインを削除
「WAF」の有効化
WEBアプリケーション・ファイヤーウォール、通称「WAF(ワフ)」といわれる セキュリティ強化機能 です。
Xサーバーやさくらサーバー等にも、デフォルトで用意されていて、各サーバーの管理画面から設定可能です。
Xサーバーであればサーバーパネルにログイン後「セキュリティ > WAF設定」から「XSS対策・SQL対策 ・ファイル対策 ・メール対策 ・コマンド対策 ・PHP対策 」の6項目を「ON/OFF」で設定できます。デフォルトでは全て「OFF」になっているのでWelcartでECサイトを運営するのであれば全て「ON」にしておきましょう。
「WAF」が対応してくれるサイバー攻撃
- クロスサイトスクリプティング(悪意あるスクリプトによる罠を仕掛ける攻撃)
- SQLインジェクション(DB言語による不正プログラム挿入攻撃)
- OSコマンドインジェクション(OS命令文による不正プログラム挿入攻撃)
- DDoS攻撃(大量の処理負荷による機能停止攻撃)
- ブルートフォースアタック(パスワードの総当り解析攻撃)
- バッファオーバーフロー(大量の不正データ送信によりシステム誤作動を発生させる攻撃)
- ディレクトリトラバーサル(ファイル参照の仕組みを悪用した不正アクセス攻撃)
「WAF」設定時の注意点
Xサーバーで「SQL対策」項目有効化で「Googleタグマネージャーと干渉して403エラー」、特定のコード(文字列)を含んでいる場合「SQL対策」「コマンド対策」「メール対策」「PHP対策」項目有効化で「WordPress管理画面のテーマ編集でファイル更新できない」となったりしますので、状況によって各項目を「OFF」にしてください。
その他のサーバーでの対策
Xサーバーには「WordPressセキュリティ設定」という項目があり、「国外IPアクセス制限設定・ログイン試行回数制限設定・コメント・トラックバック制限設定」を設定可能なので、問題がなければ全て「ON」にしておきましょう。
不正ログイン対策
管理者IDで不正ログインされてしまうと、殆どの悪さをできる状態となってしまうので、WordPressの管理画面への不正ログイン対策は出来る限りの事をしましょう。
ログインセキュリティの強化は便利なプラグインがありますので、おすすめのセキュリティ・プラグインをご紹介させていただきます。
公式に登録されていますので、WordPress管理画面の「プラグイン > 新規追加」からインストール可能です。
開発者さんが日本の方なので、プラグインの設定画面も見やすく、「.htaccess」の書き換えも行わないので後述する「.htaccess」によるセキュリティ対策とも相性が良いです、また動作も安定しています。
セキュリティ・プラグイン「XO Security」の設定
多くの機能が搭載されています、ひとまず下記項目を有効にして、不正ログイン対策を行ってください。
- ログインページURLの変更
- ログイン試行を制限
- ログインページやコメントフォームへの「CAPTCHA」追加
- ログイン時のエラーメッセージ簡略化
- バージョン情報の削除
- 投稿者スラッグ編集(「?author=1」対策)
「wp-config.php」を編集する必要がありますが「ログインできる言語(日本語:ja)を制限」も有効かと思います。
「XML-RPC の無効化」「XML-RPC ピンバックの無効化」「REST API の無効化」「投稿者アーカイブの無効化」等はご自身の環境に合わせて設定してください。
特定の「IPアドレス」からのみログインする場合
特定の「IPアドレス」からのみログインできれば問題ない場合、WordPressインストールディレクトリ(wp-contentのフォルダがある階層)にある「.htaccess」に下記コードを追記することで、指定したIPアドレス以外からのログイン画面へのアクセスを制限できます。不正ログインに対して最も有効な方法になるかと思います。
<Files wp-login.php>
Order deny,allow
Deny from all
Allow from 000.000.000.000
</Files>
「000.000.000.000」の部分はご自身の環境のIPアドレスにしてください。
複数のIPアドレスを設定したい場合は、「Allow from 000.000.000.000」の行を追加でできます。
管理画面からファイルを編集しない場合
「テーマ編集」等で管理画面からファイルを編集することがなければ下記コードを「wp-config.php」に追記し、編集を無効にできます。
define('DISALLOW_FILE_EDIT',true);
その他の不正ログイン対策
- デフォルトユーザー名「admin」があれば削除
- パスワードを英語、数字、記号等を組み合わせ予測不可能な複雑なものにする
ファイルへのアクセス制限
データベースの情報が載っている「wp-config.php」等、重要なファイルにアクセス制限をかけましょう。
WordPressインストールディレクトリにある「.htaccess」に下記コードを追加します( # BEGIN WordPress ~ # END WordPress 以外の行に記述)。バックアップをとってから編集するようにしてください。
# 「wp-config.php」「.htaccess」「error_log」「php.ini」「.htpasswd」をアクセス制限
<FilesMatch "^.*(error_log|wp-config\.php|php.ini|\.[hH][tT][aApP].*)$">
Order deny,allow
Deny from all
</FilesMatch>
# 「wp-mail.php」「install.php」「xmlrpc.php」をアクセス制限
<FilesMatch "^(wp-mail\.php|install\.php|xmlrpc\.php)">
Order allow,deny
Deny from all
</FilesMatch>
# 「wp-includes」をアクセス制限
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
# ディレクトリ一覧の非表示
Options -Indexes
「.htaccess」 編集ついでに「?author=」へのアクセスも下記コードで無効にできます。
# 「?author=」を無効
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^\?author=(.*)? / [R=302,L]
RewriteRule ^author/(.*)? / [R=302,L]
</IfModule>
編集により問題が発生した場合は、バックアップから編集前に戻し、問題のコードを洗い出し削除してください。
また「wp-config.php」のパーミッションを「400」に変更し、所有者が読み込みのみをできる設定に変更しましょう。
その他のセキュリティ対策
- フォーム入力内容のサニタイジング(エスケープ)処理
- PHPファイル先頭へif(!defined(‘ABSPATH’)) exit;の記述(外部からのPHPファイル直接実行防止)
- WordPressの不要ファイル削除(license.txt・readme.html・wp-config-sample.php 等)
また、下記の脆弱性対策情報サイトもセキュリティ対策をしていく上で役立つかと思いますので貼っておきます。
ここまでで、完全とはなりませんが、何も対策していないよりはだいぶセキュリティ強化ができているかと思います。また、なにかあれば追記しておきます。