Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
WPBカップ
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

WordPressのSQLインジェクション攻撃を防ぐ方法(7つのヒント)

SQLインジェクション攻撃からWordPressサイトを保護することは、データを保護し、訪問者の信頼を維持するために必要です。

SQLインジェクションは、あなたのデータベースを攻撃するためにハッカーによって使用される一般的なテクニックです。ひとたびSQLインジェクションが行われると、ハッカーはあなたの機密データを読み、それを変更し、データベース全体をコントロールすることができます。

この脅威からウェブサイトを守るためには、ウェブサイトに強力なセキュリティ対策を導入することが極めて重要です。

WPBeginnerでは、セキュリティを非常に重要視しており、ハッカーやマルウェアからサイトを保護するために、それ以上のことをしてきました。SQLインジェクション攻撃に対して私たちが推奨するセキュリティ対策の多くは、私たち自身が成功させた方法です。

この投稿では、WordPressのSQLインジェクション攻撃を防ぐための、実行可能なヒントを順を追って紹介します。

Prevent WordPress SQL Injection Attacks

なぜWordPressのSQLインジェクション攻撃を防ぐのか?

SQLとはStructured Query Languageの略で、WordPressサイトのデータベースと通信するためのプログラミング言語です。この機能がないと、動的なコンテンツを生成することができません。

しかし、不正なユーザー入力、古いソフトウェア、機密情報の漏洩などは、セキュリティの脆弱性を引き起こし、ハッカーによるSQLインジェクション攻撃を容易にします。

この攻撃は、データベースサーバーを標的とし、SQLに悪意のあるコードやステートメントを追加します。そうすることで、ハッカーはデータベースに保存されているユーザーデータなどの機密情報を、なりすまし、アカウント乗っ取り、金融詐欺などに利用することができます。

また、データベースのエントリやアカウントのパーミッションを変更したり、DDoS攻撃を行ったりすることも可能で、実際のユーザーがウェブサイトを訪問することを困難にします。

これは、顧客の信頼を損ない、ユーザーエクスペリエンスに悪影響を与え、ウェブサイトのトラフィックを減少させ、スモールビジネスの成長に悪影響を及ぼします。

とはいえ、WordPressのSQLインジェクション攻撃を防ぐための、実行可能なヒントをいくつか見てみましょう。この記事でお話しすることの概要は以下の通りです:

注意:予防のためにデータベースに変更を加える前に、バックアップを作成することをお勧めします。こうすることで、何か問題が発生した場合、バックアップを使って修正することができます。詳しくは、WordPressデータベースのバックアップを手動で作成する方法のチュートリアルをご覧ください。

1.定期的なサイト更新とファイアウォールの使用

SQLインジェクション攻撃を防ぐ効果的な方法は、WordPressサイトを定期的に最新バージョンに更新することです。これらの更新は、データベースソフトウェアの問題を含むセキュリティの脆弱性を修正することが多く、ハッカーがサイトを攻撃することを困難にします。

古いバージョンのWordPressを使用している場合は、ダッシュボード ” 更新ページにアクセスして、最新バージョンの自動更新を有効化することをお勧めします。

ここで、「Enable automatic updates for all new versions of WordPress」リンクをクリックするだけです。これで、すべてのメジャーアップデートがリリースと同時にあなたのサイトにインストールされます。

Install WordPress updates

詳しくは、WordPressを安全に更新するための初心者向けガイドをご覧ください。

ファイアウォールを追加してセキュリティを強化することもできます。この機能は、あなたのサイトと受信トラフィックとの間のシールドとして機能し、SQL攻撃を含む一般的なセキュリティ脅威を、それらがあなたのサイトに到達する前にブロックします。

小規模なオンラインビジネスを運営されている方には、市場で最も優れたWordPressファイアウォールソフトウェアのオプションの1つであるSucuriをお勧めします。Sucuriは、アプリケーションレベルのファイアウォール、ブルートフォース対策、マルウェアやブラックリストの除去サービスを提供しており、優れた選択肢です。

How website firewall blocks attacks

私たちは、このツールを実際に使用した経験があります。過去に私たちのウェブサイトで450,000ものWordPress攻撃をブロックするのに役立ちました。

とはいえ、Sucuriは大規模でトラフィックの多いサイトには十分な力を発揮できないかもしれない。その場合は、セキュリティ機能だけでなく、優れたコンテンツ・デリバリー・ネットワーク(CDN)を提供できるCloudflareを検討してみてはいかがだろうか。

どちらのオプションがあなたのウェブサイトに最適かわからない場合は、SucuriからCloudflareに乗り換えた理由の記事、またはSucuriとCloudflareの比較をご覧ください。

2.WordPressのバージョンを非表示にする

初期設定では、WordPressはサイトで使用しているソフトウェアの現在のバージョン番号を表示します。例えば、WordPress 6.4を使用している場合、トラッキングのためにこのバージョンがサイトに表示されます。

しかし、バージョン番号が公開されることでセキュリティ上の脅威が生じ、ハッカーによるWordPressのSQLインジェクション攻撃が容易になります。

Remove WordPress version number

WordPressの各バージョンには、攻撃者があなたのバージョンを発見した後に悪用できる独自の脆弱性があるからです。これにより、攻撃者は脆弱な入力フィールドを通じて悪意のあるコードスニペットをサイトに追加することができるようになります。

以下のコード・スニペットをfunctions.phpファイルに追加することで、サイトからバージョン番号を簡単に削除することができます。

add_filter('the_generator', '__return_empty_string');

そうすれば、ハッカーは自動スキャナーやその他の方法でWordPressのバージョン番号を見つけることができなくなる。

注意:コードを追加する際にちょっとしたエラーが発生すると、サイトにアクセスできなくなる可能性があることを覚えておいてください。そのため、WPCodeをお勧めします。サイトにカスタマイザーのコードを超安全かつ簡単に追加できる、最高のコードスニペットプラグインです。

詳しくは、WordPressのバージョン番号を削除する正しい方法についてのチュートリアルをご覧ください。

3.WordPressデータベースの接頭辞を変更する

WordPressの初期設定では、すべてのデータベースファイルに接頭辞wp_が追加されるため、ハッカーは接頭辞を狙った攻撃を計画しやすくなります。

SQLインジェクション攻撃を防ぐ最も簡単な方法は、初期設定のデータベースの接頭辞を、ハッカーが推測できないようなユニークなものに変更することです。

FTPを使ってサイトに接続すれば簡単にできます。その後、wp-config.phpファイルを開き、$table_prefixの行を変更してください。そして、初期設定のwp_から次のように変更します:wp_a123456_.

$table_prefix  = 'wp_a123456_';

次に、WebホスティングアカウントのcPanelにアクセスする必要があります。このチュートリアルでは、Bluehostを使用します。しかし、あなたのcPanelは、Webホスティング会社によって少し違って見えるかもしれません。

ここで’Advanced’タブに切り替え、’PHPMyAdmin’セクションの隣にある’Manage’ボタンをクリックする。

Click the Manage button next to the PHPMyAdmin section

新規ページが開きますので、左のカラムからデータベース名を選択し、上部の’SQL’タブに切り替えてください。

その後、次のSQLクエリーをテキストボックスに追加します。

SQL query in phpMyAdmin

wp-config.phpファイルを編集する際に、データベースの接頭辞を選択したものに変更することだけ覚えておいてください。

RENAME table `wp_comments` TO `wp_a123456_comments`;
RENAME table `wp_links` TO `wp_a123456_links`;
RENAME table `wp_options` TO `wp_a123456_options`;
RENAME table `wp_postmeta` TO `wp_a123456_postmeta`;
RENAME table `wp_RENAME table `wp_commentmeta` TO `wp_a123456_commentmeta`;
posts` TO `wp_a123456_posts`;
RENAME table `wp_terms` TO `wp_a123456_terms`;
RENAME table `wp_termmeta` TO `wp_a123456_termmeta`;
RENAME table `wp_term_relationships` TO `wp_a123456_term_relationships`;
RENAME table `wp_term_taxonomy` TO `wp_a123456_term_taxonomy`;
RENAME table `wp_usermeta` TO `wp_a123456_usermeta`;
RENAME table `wp_users` TO `wp_a123456_users`;

詳しくは、WordPressデータベースの接頭辞を変更してセキュリティを向上させる方法のチュートリアルをご覧ください。

4.ユーザーデータの正しい確認

ハッカーは通常、 コメント欄やお問い合わせフォームのフィールドなど、ユーザーデータを入力するフィールドを使用して、ウェブサイトにSQL攻撃を注入します。

そのため、WordPressブログで送信されるすべてのデータを検証することが重要です。これは、ユーザーデータが特定のフォーマットに従っていない場合、あなたのサイトに送信されないことを意味します。

例えば、メールアドレスフィールドに’@’マークがない場合、ユーザーはフォームを送信することができません。ほとんどのフォームフィールドにこの正しいバリデーションを追加することで、SQLインジェクション攻撃を防ぐことができます。

Validate your email field

そのためには、高度なフォームビルダープラグインであるFormidable Forms が必要です。このプラグインには「Input Mask Format」オプションがあり、ユーザーがフォームフィールドのデータを送信する際に従わなければならない書式を追加することができます。

電話番号や個別テキストフィールドに特定のフォーマットを追加できます。

Add hone number format

もしフォームフィールドのバリデーションをしたくないのであれば、WPFormsをお勧めします。WPFormsは完全なスパム対策とGoogle reCAPTCHAに対応した最高のお問い合わせフォームプラグインです。

また、フォームにドロップダウンメニューやチェックボックスを追加できるので、ハッカーが悪意のあるデータを追加することが難しくなります。

wpforms

詳しくは、WordPress で安全なお問い合わせフォームを作成する方法のチュートリアルをご覧ください。

5.ユーザー権限グループへのアクセスと権限を制限する。

WordPressのSQLインジェクション攻撃を防ぐもう一つのヒントは、サイトへのユーザーアクセスを制限することです。

例えば、複数著者のブログがある場合、購読者や管理者と共に様々な投稿者がいることになります。その場合、完全な管理者アクセスを管理者のみに制限することで、サイトのセキュリティを向上させることができます。

他のすべてのユーザー権限グループを、その仕事を遂行するために必須となる特定の機能に制限することができます。これにより、ユーザーによるデータベースへのアクセスを減らし、SQLインジェクション攻撃を防ぐことができます。

無料のRemove Dashboard Accessプラグインを使用すると、これを行うことができます。有効化したら、設定 ” ダッシュボードアクセスページにアクセスし、ダッシュボードにアクセスできるユーザーロールを決定します。

Limit the dashboard access settings

ユーザー権限によってユーザーを制限したい場合は、WordPressのユーザー権限グループに権限を追加または削除する方法のチュートリアルを参照してください。

同様に、管理エリアで投稿者を自分の投稿に限定することもできます。

6.カスタムデータベースエラーメッセージの作成

ユーザーがサイト上でデータベースエラーに遭遇し、データベースに関する重要な情報が表示され、SQLインジェクション攻撃を受けやすくなることがあります。

その場合は、この一般的なエラーに遭遇したときにユーザーに表示されるカスタマイザーデータベースエラーメッセージを作成することをお勧めします。そのためには、以下のコンテンツをコピー&ペーストしてメモ帳アプリに貼り付け、’db-error.php’というファイル名で保存する必要があります。

<?php // custom WordPress database error page
   
  header('HTTP/1.1 503 Service Temporarily Unavailable');
  header('Status: 503 Service Temporarily Unavailable');
  header('Retry-After: 600'); // 1 hour = 3600 seconds
   
  // If you wish to email yourself upon an error
  // mail("your@email.com", "Database Error", "There is a problem with the database!", "From: Db Error Watching");
   
?>
   
<!DOCTYPE HTML>
<html>
<head>
<title>Database Error</title>
<style>
body { padding: 20px; background: red; color: white; font-size: 60px; }
</style>
</head>
<body>
  You got problems.
</body>

その後、サイトをFTPプログラムに接続し、作成したファイルをサイトの/wp-content/ディレクトリにアップロードします。

これで、ユーザーがあなたのウェブサイトでデータベースエラーに遭遇した場合、機密情報を明かすことなく、問題を知らせるエラーメッセージが表示されます。

Custom database error preview page

さらに、ウェブブラウザーのタブに「データベースエラー」のタイトルが表示されます。

詳しくは、WordPressでカスタムデータベースエラーページを追加する方法のチュートリアルをご覧ください。

7.不要なデータベース機能の削除

SQLインジェクション攻撃を防ぐには、サイト上で不要なデータベース機能やファイルをすべて削除することも必要です。

例えば、不要なテーブルやゴミ箱内のゴミ、ハッカーにデータベースを攻撃されやすくする未承認のコメントなどを削除することができます。

不要なデータベース機能を削除するには、WP-Optimizeをお勧めします。不要なテーブル、投稿リビジョン、下書き、ゴミ箱内のコメント、削除された投稿、ピンバック、投稿メタデータなどを削除してくれる素晴らしいプラグインです。

Remove unecessary database functionality

不要なファイルをすべて削除し、データベースをより安全かつ高速に最適化します。詳しくは、WordPressデータベースを最適化する方法についての初心者ガイドをご覧ください。

ボーナス:WPBeginner Proサービスを使って安全なサイトを作成する

SQLインジェクション攻撃に対する予防策をすべて講じたら、WPBeginner Proサービスを選択することもできます。

その他、お客様がご存じないセキュリティの脆弱性を特定し、修正するお手伝いをいたします。さらに、すでにSQLインジェクション攻撃に直面している場合、当社の専門家が被害を食い止め、システムを復旧させるお手伝いをいたします。

WPBeginner Professional Services Hacked Site Repair

また、ハッキングの有無にかかわらず、サイトのスピード最適化、デザイン、SEOの改善、あるいは既存のWordPressサイトの完全な再構築もご依頼いただけます。

詳しくは、WPBeginnerプロフェッショナルサービスをすべてご覧ください。

この記事がWordPressのSQLインジェクション攻撃を防ぐ方法を学ぶのにお役に立てば幸いです。WordPressのセキュリティアップデートを確認する方法についての初心者向けガイドや、WordPressのセキュリティに関する究極のガイドもご覧ください。

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

情報開示 私たちのコンテンツは読者支援型です。これは、あなたが私たちのリンクの一部をクリックした場合、私たちはコミッションを得ることができることを意味します。 WPBeginnerの資金源 をご覧ください。3$編集プロセスをご覧ください。

アバター

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

究極のWordPressツールキット

ツールキットへの無料アクセス - すべてのプロフェッショナルが持つべきWordPress関連製品とリソースのコレクション!

Reader Interactions

1件のコメント返信を残す

  1. Jiří Vaněk

    WordPress security is alpha and omega for me. Related to that is SQL, which I’ve never paid much attention to. Thanks for this list of great tips. I’m going to check my blog right away to see what I can improve according to your list. At least I’ll try to hide the version and so on.

返信を残す

コメントありがとうございます。すべてのコメントは私たちのコメントポリシーに従ってモデレートされ、あなたのメールアドレスが公開されることはありませんのでご留意ください。名前欄にキーワードを使用しないでください。個人的で有意義な会話をしましょう。