SQLインジェクション は、入力欄などから 不正な SQL を紛れ込ませ、データベース を不正に操作する 攻撃です。情報の抜き取り、改ざん、削除などにつながる、代表的で危険な 脆弱性 です。
原因は、利用者の入力を、そのままSQL文の一部として組み立ててしまう 作りにあります。たとえばログイン処理で、入力をそのまま埋め込むと、細工した入力によって条件が常に成立してしまい、パスワードなしで認証を突破される、といったことが起こり得ます。
危険な組み立て(入力をそのまま連結)
"SELECT * FROM users WHERE name = '" + 入力 + "'"
↑ ここに細工したSQLを紛れ込ませられる
防御の基本は、入力を「値」として安全に扱う ことです。
- プレースホルダ(バインド)を使う … 入力を命令ではなく、あくまでデータとして渡す。これが最重要。
- 入力の検証 … 想定される形式かを確認する。
- 権限を絞る … データベース利用者に、必要以上の権限を与えない。
多くの フレームワーク や ORM は、標準で安全な組み立てを提供しています。「入力を信用せず、値として扱う」——これが鉄則です。