2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

SQLインジェクション

Last updated at Posted at 2024-05-15

はじめに

SQLインジェクションについてまとめる。

SQLインジェクションとは

SQL命令に不正なパラメータを引き渡すことで、本来開発者が意図していなかったはずのSQL命令が生成/実行されてしまうこと。
結果として、公開されるはずでなかった機密情報が漏洩したり、需要なデータが削除されてしまう可能性がある。

以下のようなコードがあったとして

$stt = $db->prepare("INSERT INTO book(isbn, title, price, publish, published)
VALUES('".$_POST['isbn']."', '".$_POST['title']."', '".$_POST['price']."', '".$_POST['publish']."', '".$_POST['published']."')");

$_POST['isbn']に以下の入力がされたとき

9-999-99999', '', '', '', '');DELETE FROM book; --

以下のようなクエリが生成されてしまう。

$stt = $db->prepare("INSERT INTO book(isbn, title, price, publish, published)
VALUES('9-999-99999', '', '', '', '');DELETE FROM book; --', '', '', '', '')");

「--」はコメントを表す記号のため、「--」以降は無視されてしまう。
データを一件挿入した後、bookて0ブルの全てので0田を削除する、という命令が生成されている。

対策

SQLエスケープをする。または、PDOを使っているならプレイスホルダーを使う。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?