小さな背景:私はこの会社の唯一のプログラマーです。私は既存のフレームワークで作業しています。SQL注入保護を心配する場合
つまり、同社には「必要なすべてのデータベースのやりとりが含まれている」dll(Database.dll)があります。 inと同様にQuery()
、Update()
、Insert()
などです。私が書いているプロジェクトでは、Database.dllへの参照が設定されています。私のプロジェクトでは、ユーザーの入力はゼロです。ユーザー入力に最も近いのは、ユーザーが日付を選択できるドロップダウンボックスです。 SQLインジェクションについてまだ心配する必要があるのであれば、それほど多くの経験はありません。もしそうなら、照会は
var query = string.Format("SELECT timestamp FROM table1 WHERE date = \"{0}\"
AND measured_dist = bit_loc AND rop > 0" , Date))
のように書かれていますか?すべてのクエリの実行は、既存のQuery()
によって処理されることを覚えておいてください。これは、使用する必要があり、編集できないということです。
EDITは
このプログラムのWinFormアプリケーションです。
正解は「常に」です。 –
あなたは常にそれに気を付けるべきですが、開発者の外にいる誰かがデータベース要求を提出できる唯一の方法は、ドロップダウンの選択だから、何かを注入する可能性はほとんどありません。これはWebアプリまたはコンソールアプリですか?Webアプリを使用すると、投稿方法が異なるためにリスクが大幅に増加します。コンソールアプリケーションを使用するとおそらくそれほど大きな問題にはなりません。 – Robert
パラメータ化できないものをやっていない限り、パラメータ化してください。セキュリティは別として、パフォーマンスが向上する可能性があります。パラメータ化によって、RDBMSにクエリ自体をパラメータ化して実行計画と一致させる作業が軽減されます。クライアント側では、たくさんの文字列を割り当てたり、コードを整えたりする必要がありません。 –