SQL-инъекция в коде / статическом SQL (T-SQL) - PullRequest
1 голос
/ 29 марта 2011

Подвержены ли параметризованные статические / кодовые операторы 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

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Если вы используете параметризованные запросы в коде доступа, вам не о чем беспокоиться. Проверять его внутри хранимой процедуры неправильно.

1 голос
/ 29 марта 2011

Этот код выглядит безопасным для меня ...

Параметризованный запрос - не единственный способ защитить себя от атак с использованием SQL-инъекций, но, вероятно, это самый простой и безопасный способ сделать это.

И даже если вы забудете об атаках sql-инъекций, динамическое построение запросов не рекомендуется, особенно если вы работаете со строками, поскольку они могут содержать зарезервированные для SQL слова / символы, которые будут влиять на ваш запрос.

...