← 記事一覧
Webセキュリティ · 2 分

WordPressをSQLインジェクションから守る7つの対策

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

WordPressサイトへのSQLインジェクション対策を示すイメージ

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

Ishan Nim
Cyber Crew ペネトレーションテスト/サイバーセキュリティ責任者

レッドチーム、ペイロード開発、ダークウェブの奥深くに興味がある方、ぜひお気軽にご連絡ください。

[email protected]linkedin.com/in/ishannim