SQLインジェクション
SQLインジェクションとは
不正なSQLを注入(インジェクション)することで、データベース内のデータを盗んだり、削除したりすること
たとえば、次のSQLは検索フォームに入力した内容を元に、機器名と価格を表示するためのものです
SELECT name, price FROM item_list WHERE name = $item_name;
$item_nameに「’; UPDATE item_list SET price = ‘0」というコードを入れると
SELECT name, price FROM item_list WHERE name = '【'; UPDATE item_list SET price = '0】';
となり、データベース内の価格が全て0になってしまいます
具体的な被害
個人情報の漏洩
攻撃される場所
・検索画面
・ログイン画面
対策
ユーザー入力を直接SQL文に埋め込まないことが重要です
$wpdb->prepare()を使うことで、Placeholder付きで安全にSQLを実行できます
$table_name = $wpdb->prefix . 'users';
$username = $_POST['username'];
$password = $_POST['password'];
$sql = $wpdb->get_row($wpdb->prepare(
"SELECT * FROM $table_name WHERE user_login = %s AND user_pass = %s",
$username,
$password
));
%sとしておいて、そこに$username,$passwordを代入するのが安全な実行方法です
BACK