SQLインジェクション

Security

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