Реклама:

Термином песочница обозначается способ обработки входных данных в ограниченной среде, чтобы с помощью этой информации нельзя было открыть канал данных. Наиболее распространенным примером применения рассматриваемой технологии является использование параметрических объектов ADO.NET для предотвращения вложений программных кодов SQL.

С помощью параметров вы можете определять заполнители параметров в инструкции SQL. Правильный синтаксис зависит от используемой базы данных. Например, в SQL Server используется синтаксис @имя_параметра, в то время как в других базах данных применяется знак вопроса или двоеточие. API в ADO.NET, чтобы удостовериться в правильности ввода, отбрасывает входные значения, следующие после одинарных кавычек. Чтобы продемонстрировать работу параметрических объектов, мы снова применим инструкцию SQL, которую использовали ранее в разделе « Вложение программного кода SQL».

Сначала мы создадим инструкцию SQL и добавим параметры для всех динамических значений.

string sql = "select description, price, stock from products" +

"where description=@searcrT; SqlCommand cmd = new SqlCommand(sql, con);

Затем укажем значения параметров.

cmd.Pa ramet е rs.AddWit hVa1ие("i§>search", _txtSearch.Text); SqlDataReader reader = cmd. ExecuteReadeK );

Если пользователь выполняет поиск по слову someproduct, то ADO.NET отправит на SQL Server следующую инструкцию SQL:

exec sp.executesql N'select description, price, stock from products where description=@search',N'@search nvarcnar(n) ',@search=N 'someproduct'

SQL Server заменит переменную ©search строкой 'someproduct' и выполнит запрос.

В случае злонамеренного ввода данных наподобие

' union selec; @@Version, null, null --

результирующая инструкция SQL будет такой:

exec sp_executesql N'select description, price, stock from

products where description=@searcn',N'©search

nvarcnar(40)',@searcn=N" union select 89Version, null, null —K'

Можно легко убедиться, что ADO.NET отменит ввод этих данных и проверит на корректность количество указанных кавычек. Этот запрос ничего не вернет, поскольку таблица Products не содержит описаний, начинающихся с union select.

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

r^J ПРИМЕЧАНИЕ Для того чтобы использовать хранимые процедуры, которые рекомендуется применять вместо нерегламентированных запросов SQL, укажите имя хранимой процедуры как значение CommandText, а свойству CommandType присвойте значение CommandType.StoredProcedure. Параметры для хранимой процедуры добавляются так же, как в примере кода.

Подтверждение данных

В основе еще одной полезной технологии, которая будет здесь рассмотрена, лежит проверка целостности данных. В ASP.NET эта технология применяется для подтверждения данных VicwState и билетов аутентификации. Технически данный метод реализуется путем создания кода аутентификации сообщений (Message Authentication Code, MAC), для чего используются хэширование данных и кодирование хэша с помощью машинного ключа. Функция Protected Configuration и .NET 2.0 выполняет подобную работу для файлов конфигурации. (Конфигурационные разделы не только закодированы, но и обеспечены защитой целостности данных.) Более подробная информация об этих технологиях приведена в главе 5.


⇐ Предыдущая страница| |Следующая страница ⇒