Chapter4-10 とっても悪〜い行為から守ろう!実践

目次

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番目のデータしか出ないはずです。ちなみに複数のデータを扱うこともできます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

CAPTCHA


目次