1

パラメータ化された静的/コードSQLステートメントはSQLインジェクション攻撃の対象になりますか?

たとえば、次の簡略化されたストアドプロシージャがあるとします。入力@PSeries_descを渡しているという事実は、パラメータ化されている場合、インジェクション攻撃を受けることを意味しますか?以前は、これは動的SQLステートメントであり、コードはsp_executesqlexecではなくを使用して実行されていたため、攻撃に対して確実にオープンでした。

CREATE procedure get_product_by_title
   @PSearchType int = NULL
  , @Pseries_desc varchar(40) = NULL
as
begin

declare
  @whereLikeBeg varchar(1)
, @whereLikeEnd varchar(1)

set @whereLikeBeg = ''
set @whereLikeEnd = ''

if @search_code = 'contains'
begin
  set @whereLikeBeg = '%'
  set @whereLikeEnd = '%'
end

if @search_code = 'starts_with'
begin
  set @whereLikeEnd = '%'
end

select
    distinct B.parent_product_id
    , B.parent_product_id
from
    tableA

where
    parent_product_id = child_product_id
    and product_title like @whereLikeBeg + @Pseries_desc + @whereLikeEnd
end
4

2 に答える 2

1

このコードは私には安全に見えます...

パラメータ化されたクエリは、SQLインジェクション攻撃から身を守る唯一の方法ではありませんが、おそらく最も簡単で安全な方法です。

また、SQLインジェクション攻撃を忘れたとしても、クエリに影響を与えるSQL予約語/文字が含まれている可能性があるため、文字列を操作している場合は特に、クエリを動的に構築することはお勧めできません。

于 2011-03-29T18:17:09.370 に答える
1

アクセスコードでパラメータ化されたクエリを使用している場合は、心配する必要はありません。ストアドプロシージャ内でのチェックは不適切です。

于 2011-03-29T18:17:53.330 に答える