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