目次
SQLインジェクションとは
ちょっとスクショを撮り忘れたのですが、前回のコードのままkensaku.htmlから「3 or 1」と入力すると、全部のデータが表示されてしまいます。
どういうことかというと
SELECT * FROM anketo WHERE code=3 or 1;
→「ご意見コードが3か、全部のデータをください」という意味になり、それが通ってしまうということだそうです。
SQLインジェクションを防ぐには
前回最後に紹介したページで触れられていた通り、プリペアドステートメントと呼ばれる書き方をします。
$ vim kensaku.php
iで編集モードに入り編集。
$sql='SELECT * FROM anketo WHERE code=?'; $stmt=$dbh->prepare($sql); $data[]=$code; $stmt->execute($data);
1行目→変数の連結をやめて、データを入れたい部分を「?」で表現する
3行目→データは別の変数に格納する
4行目→SQL文で命令を出すときに、データを格納した変数を指定する
esc→:wで保存。試しにkensaku.htmlから「3 or 1」と入力してみて下さい。今度は3番目のデータしか出ないはずです。ちなみに複数のデータを扱うこともできます。
コメント