2016-04-14 2 views
1

stackoverflow очень помог мне в карьере кодирования, всегда имея правильные ответы на мои вопросы. Однако этот вопрос может быть немного конкретным, и, надеюсь, он не получит суровых ответов, поскольку это мое первое сообщение на сайте.SQL Injection на SQL Server 2012

Я заинтересован в создании хранимой процедуры SQL Server 2012, которая позволяет пользователям искать различные столбцы. Я считаю, что я создал хранимый процесс, который делает то, что я ожидаю, но я обеспокоен попытками SQL Injection. Я рассмотрел все мои доступные базы с SQL Injection? Если нет, пожалуйста, просветите меня о способах обхода моего образца, хранящегося в процессе. Обратите внимание: тот, который был отмечен, был изменен для защиты структуры данных компании.

хранимых процедур:

CREATE PROCEDURE [dbo].[spSearch] 
(  
    @searchTerm varchar(50) = NULL 
) 
AS 

set @searchTerm = LTRIM(RTRIM(@searchTerm)); 

select a.ID 
     ,a.Col1 
     ,a.Col2 
     ,a.Col3 
     ,a.Col4 
     ,a.Col5 
     ,b.Col1 
from table1 a 
left join table2 b on a.ID = b.ID 
where (a.Col1 like '%' + @searchTerm + '%' 
    or a.Col2 like '%' + @searchTerm + '%' 
    or a.Col3 like '%' + @searchTerm + '%' 
    or a.Col4 like '%' + @searchTerm + '%' 
    or b.Col1 like '%' + @searchTerm + '%' 
    or b.Col2 like '%' + @searchTerm + '%' 
    or b.Col3 like '%' + @searchTerm + '%' 
    or b.Col4 like '%' + @searchTerm + '%' 
    or b.Col5 like '%' + @searchTerm + '%' 
    or b.Col6 like '%' + @searchTerm + '%') 
GO 

Моя главная проблема заключается в вешать прохождения враждебную SQL команды в параметр VARCHAR 50 символов и с его выполнять в любом из различных, где, как оговорок.

+1

Вы использовали атаку SQL-инъекций с помощью параметра. Враждебные команды будут рассматриваться как обычный «текст поиска», как если бы вы искали строку враждебной команды. –

+1

Это не проблема на этом уровне. Он уже параметризован, поэтому он будет вести себя так, как если бы это был поиск значения параметра. – Siyual

+0

Кстати, вы все равно можете ввести отверстие для инъекций SQL в точке, где вы получаете этот параметр и отправляете на SQL-сервер. –

ответ

0

Это действительно зависит от того, как вы вызываете SP из кода. Сохраненная процедура - это не безопасно для SQL-инъекции. Когда вы используете параметризованные функции, вы, вероятно, хорошо. Когда вы отправляете sql-запросы в виде строки, у вас все еще есть проблема с SQL-инъекцией. Основной проблемой является конкатенация строк в вашем коде. Конкатенации строк никогда не будут безопасными, если у вас есть параметры из ненадежного источника. Do Stored Procedures Protect Against SQL Injection?

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

+0

Спасибо, Питер! Я не планирую использовать конкатенацию строк при вызове этой хранимой процедуры, поэтому я склоняюсь к тому, что это довольно безопасный хранимый процесс. – Wadeo

+0

Вы выполняете конкатенацию строк в sp: '%' + @searchTerm + '%'. Таким образом, он сам не безопасен. Кажется, ваш метод вызова sp делает использование безопасным. – Peter