ワードプレスでSQLインジェクションを防ぐPHPプログラミングの小技をご紹介いたします。

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

SQLインジェクションとは、データベースから情報を引き出す際のSQL文に不正な文字列を与えて、意図しない情報を引き出したり、データベースに不正なデータを書き込むハッキング手法です。

"SELECT * FROM users WHERE email = '".$_GET['email']."'"

例えば上記のようなコードがワードプレスに含まれていた場合、ハッカーがブラウザーからデータを送り込んで

SELECT * FROM $wpdb->users WHERE email = 'aaa@aaa.com' or 1 = 1

のようなSQL文を実行させてしまうことが可能です。この場合1=1は常に真になるため、全ユーザーの情報が引き抜かれる可能性もございます。

ワードプレスでSQLインジェクションを防ぐPHPプログラミングの書き方

SQL文特有の処理文字を単なる文字列として変換する、エスケープと呼ばれる処理をはさむと、SQL文の処理自体を不正に実行することが困難になります。

ワードプレスには組み込みのSQL文のエスケープ関数であるesc_sqlという処理があります。

実行不可能な文字列に変換された文=esc_sql($_GET['email']);

そのほか、Prepareという処理で、文字列や数字を明示的に指定して、SQL文を置き換える方法でもSQLインジェクションを防ぐことが可能です。

エスケープされたSQL文=$wpdb->prepare( "SELECT * FROM $wpdb->users WHERE email = %s or ID = %d", $_GET['email'], $_GET['id'] )

prepare によって %s が単なる文字列として第一因数の$_GET[’email’]でエスケープされて代入され、%dが数として$_GET[‘id’]エスケープされて代入されます。

【無料】ワードプレス:マルウェアスキャン&セキュリティープラグイン [マルウェア・ウィルス検出と駆除]

WordPress ワードプレスのマルウェア駆除のご依頼ご相談はWPドクターまでお気軽にお送りください