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

WordPressのSQLインジェクション攻撃を防ぐ理由
SQLはStructured Query Languageの略で、WordPressサイトのデータベースと通信するプログラミング言語です。この機能がないと、サイトは動的なコンテンツを生成できません。
ただし、不正なユーザー入力、古いソフトウェア、または機密情報の開示は、セキュリティ上の脆弱性を引き起こし、ハッカーがSQLインジェクション攻撃を実行しやすくする可能性があります。
この攻撃はデータベースサーバーを標的とし、SQLに悪意のあるコードやステートメントを追加します。ハッカーは、ユーザーデータのようなデータベースに保存されている機密情報を使用して、なりすまし、アカウント乗っ取り、詐欺などの不正行為を行うことができます。
データベースのエントリやアカウントの権限を変更したり、DDoS攻撃を実行したりすることも可能で、実際のユーザーがあなたのウェブサイトにアクセスすることを困難にします。
これは、顧客の信頼を損ない、ユーザーエクスペリエンスに悪影響を与え、ウェブサイトへのトラフィックを減少させる可能性があり、中小企業の成長にとってマイナスとなります。
それでは、WordPress で SQL インジェクション攻撃を防ぐための具体的なヒントを見ていきましょう。この記事で説明する内容の概要を以下に示します。
注意:予防策としてデータベースに変更を加える前に、バックアップを作成することをお勧めします。これにより、万が一問題が発生した場合でも、バックアップを使用して修正できます。詳細については、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が必要です。これには、ユーザーがフォームフィールドデータを送信するために従う必要がある形式を追加できる「入力マスク形式」オプションが付属しています。
電話番号や単一のテキストフィールドに特定のフォーマットを追加できます。

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

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

機能に基づいてユーザーを制限したい場合は、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がありますが、私はあまり注意を払ってきませんでした。素晴らしいヒントのリストをありがとうございます。すぐにブログを確認して、リストに従って改善できる点を見つけます。少なくともバージョンを隠すなどのことを試してみます。