WordPressをSQLインジェクションから守る7つの対策
SQLインジェクションはWordPressで最も危険な攻撃のひとつです。データベースを守るために、実際に効く対策を優先度順に整理しました。

SQLインジェクションは、WordPress サイトに対する攻撃のなかでも最も一般的で、 そして最も被害が大きいもののひとつです。成功すればデータベースそのものが侵害され、 利用者の個人情報から認証情報まで露出します。
対策は難しくありません。順番に実装していけば、攻撃面は確実に小さくなります。
1. プリペアドステートメントを使う
最も効果が大きく、最も根本的な対策です。ユーザー入力をSQLクエリの文字列に
直接埋め込まないこと。プラグインやテーマを自作する場合は、WordPress の
$wpdb->prepare() を必ず経由させます。
// 危険 — 入力がそのままクエリに入る
$wpdb->get_results( "SELECT * FROM orders WHERE user_id = $user_id" );
// 安全 — プレースホルダ経由で渡す
$wpdb->get_results(
$wpdb->prepare( "SELECT * FROM orders WHERE user_id = %d", $user_id )
);
入力値のエスケープを自前で書こうとしないことが重要です。
2. WordPress 本体とプラグインを更新し続ける
実際の侵害の多くは、未知の脆弱性ではなく既知の脆弱性の放置から起きます。 特にプラグインは攻撃者が狙う主要な入口です。自動更新を有効にし、 使っていないプラグインとテーマは無効化ではなく削除してください。
3. WAF(Webアプリケーションファイアウォール)を導入する
WAF は、悪意あるリクエストがサイトに到達する前にフィルタします。 根本対策の代わりにはなりませんが、パッチ適用までの時間を稼ぐ層として有効です。
4. 認証を強化する
複雑で使い回しのないパスワードと、二要素認証。 管理画面へのブルートフォース攻撃は、多くの場合その後の侵害の前段階です。 入口を固めることで、後続の攻撃そのものが成立しなくなります。
5. データベース権限を最小化する
WordPress が使うデータベースユーザーに、必要以上の権限を与えないでください。
多くのサイトで DROP や GRANT は不要です。権限を絞っておけば、
仮に侵入されても攻撃者にできることが限られます。
6. 監査とログ監視を継続する
定期的なセキュリティ監査と、異常な挙動の監視。 SQLインジェクションの試行は、失敗していてもログに痕跡を残します。 早期に気づければ、悪用される前に塞げます。
7. 利用者と管理者を教育する
フィッシングをはじめとする攻撃は、技術的な脆弱性ではなく人を狙います。 最初の侵入を防ぐことが、結果的にSQLインジェクションを含む その後の攻撃チェーンを断ち切ることにつながります。
まとめ
1 が本質的な対策で、2 から 7 はその周りを固める層です。 プリペアドステートメントを徹底し、更新を怠らず、権限を絞る。 この3つだけでも、現実の攻撃の大半は通らなくなります。
この記事は Medium にも掲載しています · Medium
