私は同僚とここSOの両方に、SQLクエリ、特に.NETアプリケーションでパラメーターを使用することの良さについて説教してきました。私は、SQLインジェクション攻撃に対する耐性を与えることを彼らに約束することさえしました。
しかし、私はこれが本当に本当かどうか疑問に思い始めています。パラメータ化されたクエリに対して成功する既知のSQLインジェクション攻撃はありますか?たとえば、サーバーでバッファオーバーフローを引き起こす文字列を送信できますか?
もちろん、Webアプリケーションが安全であることを保証するために行うべき他の考慮事項があります(ユーザー入力のサニタイズなど)が、今はSQLインジェクションについて考えています。MsSQL 2005および2008はプライマリデータベースであるため、特に攻撃に興味がありますが、すべてのデータベースが興味深いものです。
編集:パラメータとパラメータ化されたクエリの意味を明確にするため。パラメータを使用するということは、SQLクエリを文字列で作成する代わりに「変数」を使用することを意味します。
したがって、これを行う代わりに:
SELECT * FROM Table WHERE Name = 'a name'
私たちはこれを行います:
SELECT * FROM Table WHERE Name = @Name
次に、クエリ/コマンドオブジェクトの@Nameパラメータの値を設定します。