ブログ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を実行を防ぐことができます。