Реклама:

Табл. 3-1. Распространенные инструкции вложения кодов SQL

Инструкция

Описание

'union select @@ Version,null, null • •

Отображает версию SQL Server (или ошиб-

 

ку, если SQL Server не используется)

union SELECT name. null, null FROM

Возвращает имена всех баз данных

ь us.databases - ■

 

union select firstjname + " + last name + "

Возвращает список клиентов с подробной

+ ccjupe + " + cc пит, null, null from customers

информацией о кредитных карточках

'union select coiumnname. null, null from

Возвращает все имена столбцов из выбран-

db.informal ion _ schema, columns where

ной таблицы

tubk name. - customers' -

 

union select first_name + " + last_name + "

Возвращает список клиентов

+ cc type + " + cc_num, null, null from

С данными о кредитных карточках

customers —

 

11аличие уязвимых мест как в администрировании, так и в коде делает такие атаки возможными. Я часто выявлял подобного рода дефекты во время тестирования и аудита. На Web-сайте данной книги содержится пример приложения, в котором можно протестировать предыдущие команды.

Чтобы предотвратить появление таких вложений SQL, нужно позаботиться о том, чтобы в инструкции SQL конкатенация данных никогда не выполнялась напрямую. В таком случае данные должны передаваться как параметры, и для этого удобно использовать хранимые процедуры. Тем более что последние предоставляют дополнительное преимущество: с помощью процедур вы можете организовать ограниченный доступ к базе данных, вместо того чтобы разрешать прямой доступ к таблицам. В хранимых процедурах ни в коем случае нельзя выполнять конкатенацию строк и параметров, например: EXEC dbo.Некоторая процедура + Некоторая переменная.

В разделе «Песочница» будет показано, как использовать Microsoft ADO.NET для вызова хранимых процедур и параметризованных инструкций SQL. Как защитить конфигурацию баз данных, описано в главе 9.

Межсаитовые сценарии

Межсайтовые сценарии (Cross-Site Scripting, XSS) представляют собой подмножество основных типов вложений HTML, которые могут запускаться во время получения таких данных от пользователя, как поля форм, заголовки, cookies или строки запросов, а также посредством вложенных в поток HTML данных. Взгляните на следующую страницу:

<%@ Page Language="Ca" ValidateRequest="falsc"%> ODOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. org/TR/xht*l l/DTD/xhrmll-transit ional.dtd"'> <scrlpt runat="server">

protected void _submit_Click(object sender. EventArgs e)

{

Output.Text - _input.Text;

I

</script>

<html xmlns="http://www.w3.org/1999/xhiml" > ■chead runat="server">

<titie>HTHL Injection Demo</title> </head> <body>

<form id="formi" runat="server"> <div>

<asp:TextBox runat="server" ID="_input" /> <asp:Button runat-'server" I0»".submit" Tcxt="0K"


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