SQL インジェクションとは、 Web アプリケーションの入力欄に SQL コードを注入し、データベースを不正に操作する攻撃手法です。 OWASP Top 10 に常にランクインする代表的な Web セキュリティ脅威であり、データの窃取、改ざん、削除、さらにはサーバーの完全な乗っ取りにつながる可能性があります。
攻撃の原理はシンプルです。たとえば、ログインフォームのユーザー名欄に ' OR '1'='1 と入力すると、バックエンドの SQL クエリが SELECT * FROM users WHERE username='' OR '1'='1' AND password='...' に変化し、条件が常に真になるため認証をバイパスできます。
SQL インジェクション対策の基本は、プリペアドステートメント (パラメータ化クエリ) の使用です。ユーザー入力を SQL 文字列に直接結合するのではなく、プレースホルダーを使ってパラメータとして渡すことで、入力値が SQL コードとして解釈されることを防ぎます。 ORM (Object-Relational Mapping) を使用している場合も、生の SQL クエリを書く際にはプリペアドステートメントを使用してください。
短縮 URL サービスでは、ユーザーが入力する URL やカスタムエイリアスが SQL インジェクションの攻撃ベクトルになり得ます。 DynamoDB のような NoSQL データベースを使用している場合、従来の SQL インジェクションは発生しませんが、 NoSQL インジェクション (クエリ条件の改ざん) のリスクは存在するため、入力バリデーションは依然として重要です。関連書籍は Amazon でも探せます。