ブログBlog

SQLインジェクション

投稿日:2025年06月03日 トピックス

こんばんは。布内です。

本日ちょっと話題に出たのでSQLインジェクションについての復習も兼ねて少し書きます。

SQLインジェクションとは、不正なSQL文をデータベースに送信することで、データを不正に操作する攻撃手法です。
具体例としては以下のようなケースがあります。
・ログインフォームのID入力欄に「’OR 1=1–」と入力して不正にログインする
・会員情報変更の入力フォームに「’ WHERE 1=1–」と入力してすべてのデータを更新(破壊)する

なぜこのような事が起こるのかを会員情報変更の入力フォームのケースで説明します。
まず以下のようなSQLがあるとします。
UPDATE CUSTOMERTABLE SET NAME = ‘name’ WHERE USERID = ‘userid’

入力フォームに名前入力欄があり、入力した値が’name’に設定されるとします。

この時に入力フォームに「’ WHERE 1=1–」と入力するとSQLは以下のようになります。

UPDATE CUSTOMERTABLE SET NAME = ” WHERE 1=1–‘ WHERE USERID = ‘XXXXX’

WHERE区が1=1となり、すべてのデータのNAMEが”で上書きされてしまいます。
(–が付いているので「’ WHERE USERID = ‘XXXXX’」はコメントアウトされます。

対策としてはいくつかありますが、2つほどあげておきます。
・プレースホルダーを使用する
・エスケープ処理を行う

プレースホルダーとは後から値を入力できるように一時的に置いておく値の事です。
先ほどのSQLをプレースホルダーにすると下記になります。
UPDATE CUSTOMERTABLE SET NAME = :name WHERE USERID = :userid

これでパラメータを設定するとデータベースが:nameと:useridにセットされたデータとして実行されるので、不正なSQLを組み込まれても機能しなくなります。

エスケープ処理はデータベースが持つ特殊記号を無効化する処理です。「’」や「”」等を無効化する事で、先ほどのような不正なSQLを実行を防ぐことができます。
PAGE TOP