SQL インジェクションとは、Web アプリケーションの入力欄やパラメータに悪意のある SQL コードを注入し、データベースを不正に操作する攻撃手法です。OWASP Top 10 に長年ランクインする代表的な Web セキュリティ脅威であり、データの漏洩、改ざん、削除などの深刻な被害を引き起こします。
攻撃の仕組みは、ユーザー入力がそのまま SQL クエリに組み込まれる脆弱性を悪用するものです。たとえば、ログインフォームのユーザー名欄に「' OR '1'='1」と入力することで、認証をバイパスできる場合があります。<% if (typeof amazonTag !== 'undefined' && amazonTag) { %><a href="https://www.amazon.co.jp/s?k=SQL%20インジェクション%20対策&tag=<%= amazonTag %>" target="_blank" rel="nofollow noopener noreferrer" class="amazon-inline-link">Amazon の関連書籍</a><% } else { %>Amazon の関連書籍<% } %>も参考になります。
SQL インジェクションの防止策として、パラメータ化クエリ (プリペアドステートメント) の使用が最も効果的です。ORM (Object-Relational Mapping) の使用も、SQL インジェクションのリスクを大幅に低減します。
短縮 URL サービスでは、ショートコードの検索やユーザー入力の URL 保存時に SQL インジェクションのリスクがあります。DynamoDB などの NoSQL データベースを使用する場合でも、NoSQL インジェクションのリスクは存在するため、入力バリデーションは必須です。<% if (typeof amazonTag !== 'undefined' && amazonTag) { %><a href="https://www.amazon.co.jp/s?k=セキュア%20Web%20開発&tag=<%= amazonTag %>" target="_blank" rel="nofollow noopener noreferrer" class="amazon-inline-link">セキュア Web 開発の実践書</a><% } else { %>セキュア Web 開発の実践書<% } %>も役立ちます。