2013-08-02 3 views
0

У меня есть C# form based web application. Когда я просматриваю приложение через веб-сканер Acunetix, он дает мне слепую SQL-инъекцию в секции добавления модуля. Отчет генерируется Acunteix являетсяSql blind Injection

POST (multipart) input ctl00$ContentPlaceHolder1$ddlRecommendoffer was set to -87 
POST/

Это ddlRecommendoffer является выпадающий список и получает значения из базы данных, и, когда я храню форму в базе данных я получаю значение этого выпадающего списка, как

ddlRecommendoffer.SelectedValue.ToString() 

DDL Значение в идеале должно быть Int (Id на строку из базы данных)

я использую процедуру магазина с параметрами, чтобы вставить его в базу данных, которая должна остановить Sql инъекции, но тогда почему он показывает мне СЛЕПЫХ SQL INJECTION на этом поле d ..

+0

Шансов показать хранимую процедуру? – Gumbo

ответ

1

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

Ваше приложение по-прежнему может быть уязвимо, хотя вы используете хранимую процедуру, если он строит запрос с параметрами динамически:

Create Procedure sp_EmployeeSelect 
    @EmployeeName NVarchar(100) 
AS 
    Declare @SQLQuery AS NVarchar(4000) 
    SET @SQLQuery = 'SELECT * FROM tblEmployees 
    WHERE EmployeeName LIKE ''%' + @EmployeeName + '%''' 
    EXECUTE sp_executesql @SQLQuery 
GO 

Здесь вы можете вводить SQL через EmployeeName, как это не правильно отформатированные/убежали.

Однако, используя параметризированную форму будут безопасным:

Create Procedure sp_EmployeeSelect 
    @EmployeeName NVarchar(100) 
AS 
    Declare @SQLQuery AS NVarchar(4000) 
    Declare @ParamDefinition AS NVarchar(2000) 
    SET @SQLQuery = 'SELECT * FROM tblEmployees 
    WHERE EmployeeName LIKE ''%'' + @EmployeeName + ''%''' 
    SET @ParamDefinition = '@EmployeeName NVarchar(100)' 
    EXECUTE sp_executesql @SQLQuery, @ParamDefinition, 
    @EmployeeName 
GO 
+0

Привет, Gumbo, все мои процедуры используют параметризованные запросы, и я не строю запросы динамически –

+0

@ user1457334 Тогда это может быть ложный позитив. Разве это не дает вам доказательства концепции? – Gumbo

+0

Я сказал своим тестерам, что это может быть ложно положительным ... но они говорят ... Инструмент тестирования генерирует следующий заголовок запроса ------- AcunetixBoundary_ESSTPIYHPH Content-Disposition: form-data; name = "ctl00 $ ContentPlaceHolder1 $ ddlRecommendoffer" 3 * 333-997 + 1-2, а ответ - это ошибка пользовательской страницы ошибки моего приложения –