SQLインジェクション攻撃からWordPressサイトを保護することは、データを安全に保ち、訪問者の信頼を維持するために必要です。
SQLインジェクションは、ハッカーがデータベースを攻撃するために使用する一般的な手法です。これを行うと、ハッカーは機密データを読み取ったり、変更したり、データベース全体を制御したりすることができます。
この脅威からウェブサイトを保護するためには、ウェブサイトに強力なセキュリティ対策を実装することが不可欠です。
WPBeginnerでは、セキュリティを非常に重視しており、ハッカーやマルウェアからサイトを保護するために、あらゆる努力を払っています。SQLインジェクション攻撃を防ぐために推奨するセキュリティ対策の多くは、私たちが自身で成功裏に使用してきた方法です。
この記事では、WordPressでSQLインジェクション攻撃を防ぐための実践的なヒントを段階的にご紹介します。

WordPressのSQLインジェクション攻撃を防ぐ理由
SQLはStructured Query Languageの略で、WordPressサイトのデータベースと通信するプログラミング言語です。この機能がないと、サイトは動的なコンテンツを生成できません。
ただし、不正なユーザー入力、古いソフトウェア、または機密情報の開示は、セキュリティ上の脆弱性を引き起こし、ハッカーがSQLインジェクション攻撃を実行しやすくする可能性があります。
この攻撃はデータベースサーバーを標的とし、SQLに悪意のあるコードやステートメントを追加します。ハッカーは、ユーザーデータのようなデータベースに保存されている機密情報を使用して、なりすまし、アカウント乗っ取り、詐欺などの不正行為を行うことができます。
また、データベースエントリやアカウントの権限を変更したり、実際のユーザーがウェブサイトを訪問することを困難にするDDoS攻撃を実行したりすることもできます。
これは、顧客の信頼を損ない、ユーザーエクスペリエンスに悪影響を与え、ウェブサイトのトラフィックを減少させる可能性があり、中小企業の成長にとってマイナスとなります。
それでは、WordPress で SQL インジェクション攻撃を防ぐための具体的なヒントを見ていきましょう。この記事で説明する内容の概要を以下に示します。
- サイトの更新を定期的に実行し、ファイアウォールを使用する
- WordPressのバージョンを非表示にする
- WordPressデータベースのプレフィックスを変更する
- ユーザーデータを検証する
- ユーザーの役割アクセスと権限を制限する
- カスタムデータベースエラーメッセージを作成する
- 不要なデータベース機能を削除する
注意: 予防措置としてデータベースに変更を加える前に、バックアップを作成することをお勧めします。これにより、何か問題が発生した場合でも、バックアップを使用して修正できます。詳細は、WordPressデータベースを手動でバックアップする方法に関するチュートリアルをご覧ください。
1. サイトの更新を定期的に実行し、ファイアウォールを使用する
SQLインジェクション攻撃を防ぐ効果的な方法は、WordPressサイトを定期的に最新バージョンに更新することです。これらのアップデートは、データベースソフトウェアの問題を含むセキュリティの脆弱性をパッチアップすることが多く、ハッカーがサイトを攻撃することを困難にします。
WordPressの古いバージョンを使用している場合は、ダッシュボード » 更新ページにアクセスして、最新バージョンへの自動更新を有効にすることをお勧めします。
ここで、「WordPressのすべての新しいバージョンに対する自動更新を有効にする」リンクをクリックするだけです。これで、すべてのメジャーアップデートがリリース時にサイトにインストールされます。

詳細については、初心者向けガイド「WordPressの安全なアップデート方法」をご覧ください。
それが完了したら、追加のセキュリティのためにファイアウォールを追加することもできます。この機能は、サイトと受信トラフィックの間のシールドとして機能し、SQL攻撃を含む一般的なセキュリティ脅威をウェブサイトに到達する前にブロックします。
小規模なオンラインビジネスを運営している場合は、市場で最高のWordPressファイアウォールソフトウェアオプションの1つであるSucuriをお勧めします。アプリケーションレベルのファイアウォール、ブルートフォース防止、マルウェアおよびブラックリスト削除サービスを提供しており、優れた選択肢となっています。

私たちはこのツールを直接使用した経験があります。過去には、このツールのおかげで、私たちのウェブサイトで450,000件のWordPress攻撃をブロックすることができました。
ただし、Sucuriは、大規模でトラフィックの多いサイトには十分な機能を持たない場合があります。その場合は、セキュリティ機能と優れたコンテンツ配信ネットワーク(CDN)を提供するCloudflareを検討すると良いでしょう。
どちらのオプションがご自身のウェブサイトに最適か不明な場合は、SucuriからCloudflareに切り替えた理由に関する記事や、SucuriとCloudflareの比較をご覧ください。
2. WordPressのバージョンを非表示にする
デフォルトでは、WordPressはウェブサイトで使用しているソフトウェアの現在のバージョン番号を表示します。たとえば、WordPress 6.4を使用している場合、そのバージョンは追跡のためにサイトに表示されます。
ただし、バージョン番号が公開されているとセキュリティ上の脅威となり、ハッカーが WordPress SQL インジェクション攻撃を実行しやすくなる可能性があります。

これは、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_';
次に、ウェブホスティングアカウントのcPanelにアクセスする必要があります。このチュートリアルでは、Bluehostを使用します。ただし、ウェブホスティング会社によってcPanelの外観は若干異なる場合があります。
ここで、「詳細設定」タブに切り替え、「PHPMyAdmin」セクションの横にある「管理」ボタンをクリックします。
![PHPMyAdmin セクションの横にある [管理] ボタンをクリックします PHPMyAdmin セクションの横にある [管理] ボタンをクリックします](https://www.wpbeginner.com/wp-content/uploads/2016/04/click-manage-next-to-phpmyadmin.png)
これにより、左側の列からデータベース名を選択し、上部から「SQL」タブに切り替える新しいページが開きます。
その後、次のSQLクエリをテキストボックスに追加できます。

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インジェクション攻撃を防ぐことができます。

これを行うには、高度なフォームビルダープラグインであるFormidable Formsが必要です。フォームフィールドデータを送信するためにユーザーが従う必要がある形式を追加できる「入力マスクフォーマット」オプションが付属しています。
電話番号や単一のテキストフィールドに特定のフォーマットを追加できます。

フォームフィールドを検証したくない場合は、フォームフィールドの検証を行わない場合は、WPForms をお勧めします。これは、完全なスパム保護と Google reCAPTCHA サポートを備えた最高のコンタクトフォームプラグインです。
また、フォームにドロップダウンメニューやチェックボックスを追加できるため、ハッカーが悪意のあるデータを追加するのが困難になります。

WordPressで安全な問い合わせフォームを作成する方法に関するチュートリアルで、詳細をご覧ください。
5. ユーザーの役割アクセスと権限を制限する
WordPressのSQLインジェクション攻撃を防ぐためのもう1つのヒントは、ウェブサイトへのユーザーアクセスを制限することです。
例えば、複数著者ブログを運営している場合、購読者や管理者だけでなく、さまざまな著者が存在することになります。その場合、管理者にのみ完全な管理者アクセスを制限することで、サイトのセキュリティを向上させることができます。
他のすべてのユーザーロールを、その職務を遂行するために必要な特定の機能に制限できます。これにより、データベースへのユーザーアクセスが減少し、SQLインジェクション攻撃を防ぐことができます。
これは、無料のRemove Dashboard Accessプラグインで行うことができます。有効化したら、設定 » ダッシュボードアクセスページにアクセスするだけで、どのユーザーロールがダッシュボードへのアクセス権を持つかを決定できます。

ユーザーの能力に応じて制限したい場合は、WordPress のユーザーロールに機能を追加または削除する方法に関するチュートリアルをご覧ください。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/ディレクトリにアップロードします。
これで、ユーザーがウェブサイトでデータベースエラーに遭遇した場合、機密情報を漏洩することなく、問題について通知するエラーメッセージが表示されます。

さらに、「データベースエラー」というタイトルがウェブブラウザのタブに表示されます。
WordPressでカスタムデータベースエラーページを追加する方法に関するチュートリアルで、詳細をご覧ください。
7. 不要なデータベース機能の削除
SQLインジェクション攻撃を防ぐには、ウェブサイトで必要のないデータベース機能やファイルをすべて削除するようにしてください。
例えば、ハッカーにデータベースを脆弱にする可能性のある不要なテーブル、ゴミ箱、または承認されていないコメントを削除できます。
不要なデータベース機能を削除するには、WP-Optimizeをお勧めします。これは、不要なテーブル、投稿リビジョン、下書き、ゴミ箱コメント、削除済み投稿、ピンバック、投稿メタデータなどを削除する素晴らしいプラグインです。

不要なファイルをすべて削除し、データベースを最適化して、より安全で高速にします。詳細は、WordPressデータベースをワンクリックで最適化する方法に関する初心者向けガイドをご覧ください。
この記事がWordPressのSQLインジェクション攻撃を防ぐ方法を学ぶのに役立ったことを願っています。また、WordPressのセキュリティアップデートを確認する方法に関する初心者向けガイドや、WordPressセキュリティの究極のガイドもご覧ください。
この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterやFacebookでもフォローできます。

モイヌディン・ワヒード
WordPressのバージョンを簡単に非表示にできることに驚いています。これにより、デフォルトでハッカーがWordPressのバージョンとその脆弱性に基づいて脆弱性を推測するのを防ぐことができます。
ウェブサイトをSQLインジェクションから保護するための素晴らしいヒントです。
これらのトリックを実装して、ウェブサイトをあらゆるセキュリティの抜け穴から安全にします。
オヤトグン・オルワセウン・サミュエル
WordPressのバージョンを隠すのは私にとって新しいことです。WordPressの各バージョンには固有の脆弱性があるため、バージョン番号を隠すことで、ハッカーは何のバージョンのWordPressが使用されているか分からなくなり、関連する脆弱性を利用することさえできなくなります。情報提供ありがとうございます。また、ユーザー入力を収集するプラグインを開発している場合、(通常の検証の後)データベースに挿入されるユーザー入力をエスケープするのが賢明だと考えています。
イジー・ヴァネック
私にとってWordPressのセキュリティは最重要事項です。それに関連してSQLがありますが、私はあまり注意を払ってきませんでした。素晴らしいヒントのリストをありがとうございます。すぐにブログを確認して、リストに従って改善できる点を見つけます。少なくともバージョンを隠すなどのことを試してみます。