wpdbクラスのprepare関数でSQLインジェクション対策をしよう! | 株式会社Esolab
logo

ARTICLE

記事ページ

記事ページ

wpdbクラスのprepare関数でSQLインジェクション対策をしよう!

TECH

前回に引き続きwpdbクラスの関数の説明をしていきたいと思います。

以前の記事ではwpdbクラスで抽出するための関数を紹介しました。

今回はそのwpdbクラスを使用して抽出した際に気をつけなければいけないSQLインジェクション対策を行える関数の紹介をします。

そもそもSQLインジェクションとは?



まず初めに、SQLインジェクションとは何かを簡単に説明したいと思います。

SQLインジェクションとは不正なSQL文を実行することによりデータベースを不正に操作し攻撃することです。

SQLインジェクション対策をしていなければデータを勝手に削除されたり変更されたりする可能性があります。

では、実際にSQLインジェクション対策とは何をすればいいのでしょうか?

今回はwpdbクラスのSQLインジェクション対策を紹介します。

wpdbクラスのprepare関数



wpdbクラスにはSQLインジェクション対策に必要なプリペアドステートメントが用意されています。

関数名はprepareで、prepare関数ではプレースホルダが使用できます。

プレースホルダとして指定された値は、エスケープされSQL文中で値としてのみ扱われるようになります。

実際には下記のように記述します。

$sql = “SELECT * FROM $wpdb->postmeta WHERE post_id = %d AND meta_key = %s;

$query = $wpdb->prepare( $sql, 1, “PHP” );

$results = $wpdb->get_results( $query );

では説明いたします。

WHERE句に指定しているpost_idはint型なので%d、meta_keyはstring型なので%sとなります。

数値は%d、文字列は%sとすると覚えてしまいましょう。

そして次の行のprepare( $sql, 1, “PHP” )の部分ですが、これは第一引数にsqlを渡し、第二引数以降に%dや%sに渡す値を指定します。

 

あとは前回の記事で述べたように取得するだけです。

まとめ



今回、SQLインジェクション対策にprepare関数を説明しましたが、この一手間が非常に重要になります。

実際にデータベースを不正に操作されれば大問題です。

プリペアドステートメントを実装するだけでなく万が一に備え、データベースのバックアップを定期的にとるようにもしましょう。

この記事を書いた人

田川烈

開発部 フロントエンジニア

アーカイブ

カテゴリー

  • TECH (23)
  • DESIGN (9)
  • MARKETING (5)
  • OTHER (4)
  • SEO (3)
  • お問い合わせ

    株式会社EsolabではWEBサイトやECサイトの運営など多岐にわたり事業を展開しています。
    ホームページや自社ECサイトをお求めの方は一度お問い合わせください。

    お問い合わせ