• ベストアンサー

レコード削除・sqlインジェクション対策

このようなSQL文は危険でしょうか? $sql = "delete テーブル名 where id = :id"; $stmt = $dbh->prepare($sql); $stmt->execute(array(":id" => $_POST['id'])); 上記の例だと、$_POST['id']は、 ちゃんとエスケープできているのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5253/13739)
回答No.1

プログラムの書き方からすると言語はPHPでしょうか。 プリペアドステートメントを使っていれば、ドライバーの方でエスケープ処理やクォートで囲む処理を行ってくれるのでSQLインジェクション対策になります。

k5z
質問者

お礼

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

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

なんかうまく伝わってないみたいで、すみません。 POSTでidを送りつけてデータが削除できるなら、 ユーザーが1から順番に100番、1000番・・・と適当におくってきたときに 全部消されちゃいますよという意味です。 インジェクションの場合、SELECT文の参照時に、不正にUPDATEやDELETE されないような処理とか、本来アクセスできないSELECT文にオールの パラメータをあたえて不正にデータを引き出すのを防ぐ処理なので DELETE文などは特殊な権限をもったユーザーに処理させるために リンクを調整するところから入ると思います

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

インジェクションはともかく、ユーザーから渡されたIDでデータを削除 することができるのであれば、インジェクションに近い全データ削除だって されちゃうんじゃないですか? delete文の発行するのはかなり条件を厳しくした方がよいですよ

k5z
質問者

お礼

アドバイス、ありがとうございます! 現状で、「:id」に入る文字は、 どのような制限がかけられているのでしょうか? 整数のみでしょうか? それとも、英数字も入力可能なのでしょうか?

関連するQ&A