従来の ASP 検索エンジンを更新して、SQL インジェクションから保護しようとしています。さまざまな検索パラメーターに基づいてクエリを連結することにより、クエリを動的に構築する VB 6 関数があります。これを、キーワードを除くすべてのパラメーターに対して動的 SQL を使用してストアド プロシージャに変換しました。
キーワードの問題は、ユーザーが提供する可変数の単語があり、キーワードごとに複数の列を検索する必要があることです。キーワードごとに個別のパラメーターを作成することはできないため、安全なクエリを作成するにはどうすればよいでしょうか?
例:
@CustomerId AS INT
@Keywords AS NVARCHAR(MAX)
@sql = 'SELECT event_name FROM calendar WHERE customer_id = @CustomerId '
--(loop through each keyword passed in and concatenate)
@sql = @sql + 'AND (event_name LIKE ''%' + @Keywords + '%'' OR event_details LIKE ''%' + @Keywords + '%'')'
EXEC sp_executesql @sql N'@CustomerId INT, @CustomerId = @CustomerId
これを処理し、SQL インジェクションからの保護を維持する最善の方法は何ですか?