- ベストアンサー
レコード削除・sqlインジェクション対策
このようなSQL文は危険でしょうか? $sql = "delete テーブル名 where id = :id"; $stmt = $dbh->prepare($sql); $stmt->execute(array(":id" => $_POST['id'])); 上記の例だと、$_POST['id']は、 ちゃんとエスケープできているのでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
プログラムの書き方からすると言語はPHPでしょうか。 プリペアドステートメントを使っていれば、ドライバーの方でエスケープ処理やクォートで囲む処理を行ってくれるのでSQLインジェクション対策になります。
その他の回答 (2)
- yambejp
- ベストアンサー率51% (3827/7415)
なんかうまく伝わってないみたいで、すみません。 POSTでidを送りつけてデータが削除できるなら、 ユーザーが1から順番に100番、1000番・・・と適当におくってきたときに 全部消されちゃいますよという意味です。 インジェクションの場合、SELECT文の参照時に、不正にUPDATEやDELETE されないような処理とか、本来アクセスできないSELECT文にオールの パラメータをあたえて不正にデータを引き出すのを防ぐ処理なので DELETE文などは特殊な権限をもったユーザーに処理させるために リンクを調整するところから入ると思います
- yambejp
- ベストアンサー率51% (3827/7415)
インジェクションはともかく、ユーザーから渡されたIDでデータを削除 することができるのであれば、インジェクションに近い全データ削除だって されちゃうんじゃないですか? delete文の発行するのはかなり条件を厳しくした方がよいですよ
お礼
アドバイス、ありがとうございます! 現状で、「:id」に入る文字は、 どのような制限がかけられているのでしょうか? 整数のみでしょうか? それとも、英数字も入力可能なのでしょうか?
お礼
教えて頂いてありがとうございます!m(_ _)m