1

参数化的静态/代码 SQL 语句是否会受到 SQL 注入攻击?

例如,假设我有以下简化的存储过程:我传递输入@PSeries_desc 是否意味着如果参数化了我会受到注入攻击?以前,这是一条动态 SQL 语句,并且代码是使用exec而不是sp_executesql执行的,所以它肯定容易受到攻击。

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 回答