性格悪い人が優勝

このようなSQL文は危険でしょうか?

$sql = "delete テーブル名 where id = :id";
$stmt = $dbh->prepare($sql);
$stmt->execute(array(":id" => $_POST['id']));

上記の例だと、$_POST['id']は、
ちゃんとエスケープできているのでしょうか?

A 回答 (3件)

プログラムの書き方からすると言語はPHPでしょうか。


プリペアドステートメントを使っていれば、ドライバーの方でエスケープ処理やクォートで囲む処理を行ってくれるのでSQLインジェクション対策になります。
    • good
    • 0
この回答へのお礼

教えて頂いてありがとうございます!m(_ _)m

お礼日時:2013/03/19 12:50

なんかうまく伝わってないみたいで、すみません。



POSTでidを送りつけてデータが削除できるなら、
ユーザーが1から順番に100番、1000番・・・と適当におくってきたときに
全部消されちゃいますよという意味です。

インジェクションの場合、SELECT文の参照時に、不正にUPDATEやDELETE
されないような処理とか、本来アクセスできないSELECT文にオールの
パラメータをあたえて不正にデータを引き出すのを防ぐ処理なので

DELETE文などは特殊な権限をもったユーザーに処理させるために
リンクを調整するところから入ると思います
    • good
    • 0

インジェクションはともかく、ユーザーから渡されたIDでデータを削除


することができるのであれば、インジェクションに近い全データ削除だって
されちゃうんじゃないですか?
delete文の発行するのはかなり条件を厳しくした方がよいですよ
    • good
    • 0
この回答へのお礼

アドバイス、ありがとうございます!

現状で、「:id」に入る文字は、
どのような制限がかけられているのでしょうか?

整数のみでしょうか?
それとも、英数字も入力可能なのでしょうか?

お礼日時:2013/03/19 13:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!