ネットワークセキュリティ
 Computer >> コンピューター >  >> ネットワーキング >> ネットワークセキュリティ

WordPressデータベースを守るには?ハッカーからサイトを保護する6つのセキュリティ対策

WordPressのデータベースを効率的に保護するためには、WordPressがどのようにデータベースを利用しているのか、ハッカーに悪用されやすい脆弱性は何か、そしてそれらの脆弱性をどう回避すればよいのかを理解することが重要です。

WordPressはどのようにデータベースを使っているのか?

WordPressは、PHPをスクリプト言語として使用し(データベースへのデータ保存・取得)、MySQLをデータベース管理システムとして採用しています。PHPのコード内でSQLクエリを実行することで動作します。例えば、WordPressで構築されたビジネスサイトにログインする際、実際にログイン処理を行い、ユーザーIDを抽出して検証し、フロントエンドに正しいプロフィール情報を表示しているのはSQLです。

PHPとSQLは密接に連携しており、これによってWordPressはユーザーにとって動的なコンテンツ体験を実現しています。管理者、編集者、購読者など、特定のユーザーに合わせたコンテンツのカスタマイズも可能です。

また、プラグインやテーマもWordPressのデータベースにデータを保存します。PHPコード内でSQLを使用してデータベースへクエリを発行し、コンテンツを動的に出力しています。WP-DB Managerのようなプラグインを使えば、データベースを簡単に管理することもできます。

関連記事:作業時間を節約できる15のWordPress設定テクニック

WordPressデータベースを守るには?ハッカーからサイトを保護する6つのセキュリティ対策

WordPressデータベースを安全に保つ方法

WordPressデータベースは、投稿、固定ページ、コメント、タグ、ユーザー、カテゴリー、カスタムフィールド、その他のサイト設定など、サイトに関するあらゆる情報を格納する「脳」のような存在です。そのため、悪意ある攻撃者にとって格好の標的となります。スパマーやハッカーは、SQLインジェクション攻撃を自動化されたコードで実行しています。ここからは、WordPressデータベースを守る具体的な方法を紹介します。

関連記事:押さえておきたい25のWordPressセキュリティ対策

1. 管理者ユーザー名を変更する

他のCMSと同様に、WordPressにもデフォルトの管理者ログイン情報が存在します。デフォルトのまま放置すると、悪意ある第三者が不正にサイトやデータベースへアクセスしやすくなります。

WordPressのデフォルトユーザー名はadminです。まだ変更していない場合は、今すぐ変更しましょう。

  1. phpMyAdminにアクセスします。
  2. 以下のクエリを実行します。これにより、ユーザー名がadminから任意の名前に変更されます。
    UPDATE {database_prefix}users SET user_login='anything' WHERE user_login='admin';
  3. WordPressマルチサイトの場合は、grant_super_admin()関数を使って特権管理者権限を付与できます。

2. 管理者IDを変更する

WordPressでは、デフォルトの管理者ユーザー名がadmin、管理者ユーザーIDは「1」に設定されています。この仕様を悪用したSQLインジェクション攻撃は数多く報告されています。データベースを安全に保つため、できるだけ早く変更しましょう。管理者ユーザーIDを変更する手順は以下の通りです。

  1. phpMyAdminにアクセスします。
  2. 以下のクエリを実行します。
UPDATE wp_users SET ID = 2807 WHERE ID = 1; UPDATE wp_posts SET post_author = 2807 WHERE post_author = 1; UPDATE wp_comments SET user_id = 2807 WHERE user_id = 1; UPDATE wp_usermeta SET user_id = 2807 WHERE user_id = 1; ALTER TABLE wp_users AUTO_INCREMENT = 2808

TIP: 変更を加える前に必ずバックアップを作成することを強くおすすめします。また、変更のたびにサイトが正常に動作しているか確認し、他の機能に影響が出ていないかチェックしてください。

WordPressマルチサイトの場合は、ネットワーク内の各サイトごとに以下のような数行を複製して実行する必要があります。

UPDATE wp_2_posts SET post_author = 5487 WHERE post_author = 1; UPDATE wp_2_comments SET user_id = 5487 WHERE user_id = 1;

PHPと$wpdbを使って、ループ処理でクエリを実行することも可能です。

3. データベース接頭辞(プレフィックス)を変更する

WordPressのデフォルトのデータベース接頭辞はwp_です。データベースを安全に保つためには、WordPressインストール時にデフォルトの接頭辞を変更することを強くおすすめします。

WordPressデータベースを守るには?ハッカーからサイトを保護する6つのセキュリティ対策

まだ変更していない場合は、今すぐ実施しましょう。手順は以下の通りです。

  1. FTPクライアントでサイトにアクセスします。
  2. ルートディレクトリにある設定ファイルwp_config.phpを開きます。
  3. wp_接頭辞が記述されている行を見つけて変更します。
    $table_prefix = 'wp_ga2807_';
  4. WordPressのすべてのデフォルトテーブル名を変更します。
    RENAME TABLE wp_comments TO wp_ga2807_comments;
    RENAME TABLE wp_commentmeta TO wp_ga2807_commentmeta;
    RENAME TABLE wp_links TO wp_ga2807_links;
    RENAME TABLE wp_options TO wp_ga2807_options;
    RENAME TABLE wp_postmeta TO wp_ga2807_postmeta;
    RENAME TABLE wp_posts TO wp_ga2807_posts;
    RENAME TABLE wp_terms TO wp_ga2807_terms;
    RENAME TABLE wp_termmeta TO wp_ga2807_termmeta;
    RENAME TABLE wp_term_relationships TO wp_ga2807_term_relationships;
    RENAME TABLE wp_term_taxonomy TO wp_ga2807_term_taxonomy;
    RENAME TABLE wp_usermeta TO wp_ga2807_usermeta;
    RENAME TABLE wp_users TO wp_ga2807_users;
  5. wp_ga2807_usermetawp_ga2807_options(旧wp_usermetaおよびwp_optionsテーブル)内のwp_という記述をすべて置き換えます。
    UPDATE wp_ga2807_options SET option_name = REPLACE(option_name, 'wp_', 'wp_ga2807_') WHERE option_name LIKE 'wp_%';
    UPDATE wp_ga2807_usermeta SET meta_key = REPLACE(meta_key, 'wp_', 'wp_ga2807_') WHERE meta_key LIKE 'wp_%';
  6. プラグインは独自のテーブルをデータベースに作成します。これらのテーブル名も忘れずに変更しましょう。例えば、WooCommerceは広く使われているWordPressプラグインですが、そのテーブル名を変更するには以下のクエリを実行します。
    RENAME TABLE wp_woocommerce_api_keys TO wp_ga2807_woocommerce_api_keys;
    RENAME TABLE wp_woocommerce_attribute_taxonomies TO wp_ga2807_woocommerce_attribute_taxonomies;
    RENAME TABLE wp_woocommerce_downloadable_product_permissions TO wp_ga2807_woocommerce_downloadable_product_permissions;
    RENAME TABLE wp_woocommerce_order_itemmeta TO wp_ga2807_woocommerce_order_itemmeta;
    RENAME TABLE wp_woocommerce_order_items TO wp_ga2807_woocommerce_order_items;
    RENAME TABLE wp_woocommerce_payment_tokenmeta TO wp_ga2807_woocommerce_payment_tokenmeta;
    RENAME TABLE wp_woocommerce_payment_tokens TO wp_ga2807_woocommerce_payment_tokens;
    RENAME TABLE wp_woocommerce_sessions TO wp_ga2807_woocommerce_sessions;

注意:データベース接頭辞はプラグインを使って変更することもできます。「Change Table Prefix」は便利なプラグインの一つです。

4. データベースユーザーの権限を厳しく制限する

ユーザー権限を厳格に設定することで、WordPressデータベースのセキュリティは向上します。wp-config.phpファイルに指定するMySQLユーザーには、厳しい権限制限を設けるべきです。インストール時には、必要なテーブルやオブジェクトを作成するために全権限を付与しますが、これは一時的な措置にとどめるべきです。インストール完了後は、MySQLユーザーに必要なのはDATA READ(読み取り)とDATA WRITE(書き込み)の権限だけです。

5. バックアップを作成する

サイトやデータベースに変更を加える前に、必ずバックアップを作成してください。繰り返しますが、バックアップは必須です!定期的なバックアップは、感染被害が発生した場合に非常に役立ちます。バックアップを復元するだけで、感染したファイルを取り除くことができます。

ただし、バックアップを復元しても、攻撃者が悪用した脆弱性自体は解決されていません。Astraの脆弱性診断・ペネトレーションテストに申し込めば、サイトに潜む隠れたバックドアやセキュリティ上の脆弱性をすべて洗い出すことができます。

6. 不要なカスタムテーブルを削除する

サイトから拡張機能(プラグインなど)を削除した後は、データベースから関連するカスタムテーブルを削除することをおすすめします。そうしないと、サイト運営期間中に不要なテーブルが大量に蓄積されていきます。なお、一部のプラグインには、アンインストール時にサイトやデータベースから自身のデータを自動的に削除するオプションが備わっています。

注意:今後絶対に再インストールしないと確信できるプラグインのテーブルのみ削除してください。カスタムテーブルを一度削除すると元に戻せません。

関連記事:誰もがやってしまう7つのWordPressのよくある失敗

まとめ

どれほど適切な対策を講じても、100%のセキュリティを保証することはできません。ハッカーは常に、サイトやデータベースへの侵入手段を新たに模索しています。あらゆる脅威からWordPressを守る最善策は、何よりもまずファイアウォールを導入することです。Astraのファイアウォールがサイトのセキュリティを担うことで、あなたはビジネスの成長に集中できます。

この記事が役に立ったと思ったら、Facebook、Twitter、LinkedInで友人たちにもぜひシェアしてください。

  1. WordPressのwp-config.phpファイルを保護する方法を徹底解説

    ハッカーの視点で考えてみてください。何千ものWebサイトが利用しているプラットフォームに侵入したり、複数のサイトに対してブルートフォース攻撃を仕掛けたりするのは、彼らにとって魅力的な標的です。WP-Scannerのようなオープンソースツールが出回っている現在、初心者レベルの攻撃者でも、プロフェッショナルなWordPressサイトに侵入し、悪夢のような被害をもたらすことが可能になっています。 その中でもwp-config.phpは、サイトの運命を左右する最重要ファイルの一つです。このファイルが漏洩すれば、サイト全体が危険にさらされます。本記事では、wp-config.phpファイルを安全に保護す

  2. WordPressのJavaScriptマルウェアを削除する方法|原因の特定から対策まで完全解説

    WordPressのJavaScriptマルウェア除去の手法をご紹介する前に、まずJavaScriptとは何か、そしてWordPressサイトにおいてどのような役割を果たしているのかを簡単に確認しておきましょう。 ご存知でしたか?JavaScriptは、世界中のウェブサイトの94.5%で使用されているウェブ技術です。Webページのカスタマイズ、アニメーション、レスポンシブ対応など、ページを動的にする要素はすべてJavaScriptで実現できます。さらに、Node.jsのようなクロスプラットフォームのランタイムエンジンを使えば、サーバーサイドのコードも記述可能です。そして最大の魅力は、HTML