Реклама:

Задача состоит в определении достоверности данных в рамках вашего приложения (рис. 3-1) — каким входным данным можно доверять, а какие следует рассматривать как используемые злонамеренно.

Прежде всего, любые данные, передаваемые через сеть (как по инициативе пользователя, так и из автоматизированных сценариев сканирования/атаки), считаются потенциально опасными.

Байер Доминик Microsoft ASP.NET. Обеспечение безопасности. Мастер-класс

РнС. 3-1. Подтверждение ввода данных и границы доверия

Щ ПРИМЕЧАНИЕ В случае использования приложений Asynchronous Java Script и XML (AJAX) ситуация становится еще сложнее. Несмотря на то что основное требование подтверждения всех внешних данных остается неизменным, их можно вводить е систему различными способами. В стандартных Web-приложениях все данные передаются через страничные запросы и обратную передачу, на чем и следует сосредоточить усилия. В приложениях AJAX на стороне клиента запускается больше кодов (например, специализированные Обработчики и Web-службы). Эти коды не являются доверенными, поскольку запускаются на стороне клиента, однако создают все типы запросов различных частей приложения. Поэтому существует так много способов ввода данных в систему.

Что же касаетсн источников, то здесь сложно принять решение о доверии к входным данным. Информация из хранилищ внутренних сетей, использующих ограничения данных (например, на основе типов и значений но умолчанию), заслуживает большего доверия, чем некоторые строковые данные, поступающие по IP-адресам. Тем не менее здесь нужно продумать также возможность нанесения ущерба приложению путем неправильного формирования данных (не говоря уже о злонамеренно формируемых данных). Кроме того, следует рассмотреть возможность вложения в данные программных кодов, сформированных с целью вторжения в приложение. В главе 4 более подробно говорится о том, как предупредить незаконное манипулирование данными приложения и конфигурации и повысить надежность используемых типов данных.

В принципе, вы будете в безопасности, если станете выполнять подтверждение всех вводных данных, от которых зависит приложение. Такая стратегия вместе с общим повышением защиты приложения приводит к созданию более надежных программ.

С] ПРИМЕЧАНИЕ В языке Peri имеется надежный режим безопасности tainting, когда изначально всем переменным с внешними данными (например, в интерфейсе CGI) присваивается так называемый бит taint, запрещающий их использование в качестве входных данных для системных вызовов. Чтобы «снять подозрения» с таких данных, программа должна проверить входную информацию с помощью операции сравнения шаблонов, например регулярных выражений. Было бы целесообразно предусмотреть такую возможность и в CLR.

Вот список наиболее распространенных входных данных, которые обязательно нужно подтверждать.

• Элементы пользовательского интерфейса (например, текстовые блоки и списки).

■ Файлы конфигурации и данные операционной среды.

■ Файлы данных (даже если они были созданы вашим приложением).

■ Данные, извлеченные из хранилища или базы данных.


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