webアプリケーションでデータベースとのやり取りをする際、気を付けなければならないのはSQLインジェクションである。 POSTで以下のSQL文のusernameに入力を入れるとする。
SELECT * FROM user_info WHERE name = username #user1と入力したら以下のようになる SELECT * FROM user_info WHERE name = 'user1'
この時、 ’OR’A’=’A と入力されるとSQL文は以下のようになり、条件を満たしてしまう。
SELECT * FROM user_info WHERE name = ''OR'A'='A'
これがSQLインジェクションである。 SQLインジェクションの対策としてプレースホルダというものがある。 これは入力された文字列をそのまま入れるのではなく、最後に値として入れる方法で、これによりSQLインジェクションを防ぐことができる。 以下にプレースホルダの例を示す。
$sql = "SELECT * FROM user_info WHERE name = ? " $stmt = $dbh->prepare($sql) $stmt->execute(username)
もし2つ以上入力したいときはその数 ? を入れることでできる。この時のexecuteの括弧の中は配列にすればよい。