Опубликован: 24.01.2007 | Доступ: свободный | Студентов: 1253 / 82 | Оценка: 4.37 / 4.17 | Длительность: 14:27:00
ISBN: 978-5-94774-627-3
Лекция 4:

Настроечные параметры System.Web

При выполнении запроса к приложению ASP.NET этот запрос обрабатывается как обычно. Непосредственно перед отправкой ответа запускается данный метод, добавляющий в конец запроса текст копирайта. Перед выполнением модуля его нужно зарегистрировать в вашем настроечном файле.

<httpModules>
  <add name="CopyrightModule" type="Microsoft.CopyrightModule" />
</httpModules>

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

Ключевые моменты <httpModules>

Раздел <httpModules> и собственные модули HTTP позволяют работать напрямую с потоком обработки HTTP.

  • Раздел <httpModules> – это раздел, основанный на коллекции, в которую можно добавлять модули, удалять их из нее и полностью очищать эту коллекцию.
  • Модули HTTP – это классы .NET, реализующие интерфейс IHttpModule. Данный интерфейс требует, чтобы класс включал методы Init и Dispose.
  • Приложение HTTP предоставляет несколько событий, которые можно перехватывать в своих модулях. Каждое такое событие происходит на различных стадиях обработки HTTP и позволяет изменять на этих стадиях объекты запроса и ответа.

Работа с разделом <httpRuntime>

Раздел <httpRuntime> включает параметры, относящихся к среде выполнения HTTP ASP.NET. Параметры раздела включают установки максимального количества разрешенных запросов, размера запросов и времени хранения запросов. Ниже приведен синтаксис раздела <httpRuntime>.

<httpRuntime appRequestQueueLimit="number of requests"
  executionTimeout="seconds" maxRequestLength="Kbytes"
  minFreeLocalRequestFreeThreads="number of threads"
  minFreeThreads="number of threads" useFullyQualifiedRedirectUrl=
  "true | false" versionHeader="version string" />

Таблица 4.13 содержит перечень свойств раздела <httpRuntime>.

Таблица 4.13. Свойства <httpRuntime>
Свойство Описание
appRequestQueueLimit Определяет максимальное количество запросов в очереди. Если для обработки запроса нет свободных потоков выполнения, он ставится в очередь. При заполнении очереди среда выполнения возвращает ошибку 503 Server Too Busy (Сервер занят). Параметр определяет, сколько запросов может быть помещено в очередь, пока не будет возвращена эта ошибка.
executionTimeout Определяет максимальное количество секунд, в течение которых запрос может обрабатываться, прежде чем будет принудительно завершен средой ASP.NET.
maxRequestLength Определяет максимальный размер запроса, поддерживаемый средой выполнения. Параметр связан с максимальным размером загружаемого файла, так как загружаемый файл включается в запрос HTTP. Он помогает защитить ваше приложение от атак типа denial of service (отказ в обслуживании), так как одним из методов этих атак является отправка на сервер слишком больших файлов. Значением по умолчанию является 4096 Kб или 4 Mб.
minFreeLocalRequestFreeThreads Определяет минимальное количество потоков выполнения, которое ASP.NET держит готовыми для выполнения новых локальных запросов. Эти потоки зарезервированы для запросов, поступающих от локальной системы. Иногда запросы генерируют дочерние запросы к локальной системе, и если поток выполнения для дочернего запроса недоступен, возникнет взаимная блокировка. Специальные потоки, зарезервированные для запросов локальной системы, помогают предотвратить возможность возникновения взаимных блокировок.
minFreeThreads Определяет минимальное количество свободных потоков выполнения, предназначенных для обработки новых запросов.
useFullyQualifiedRedirectUrl Определяет, используют ли перенаправления клиентов полные (абсолютные) адреса URL или относительные. Полный URL – это адрес, включающий в URL информацию о сайте (например, http://server/path ). Относительный URL включает только путь относительно уже заданного пути сервера, (например /path/app2/admin.aspx ).
versionHeader Определяет заголовочное значение версии, направляемое ASP.NET с каждым ответом HTTP. Оно используется в Microsoft Visual Studio .NET для определения версии ASP.NET. Это значение необязательно для эксплуатируемых сайтов и может быть отключено при помощи установки данного параметра в пустое значение или удаления этого атрибута.

Ниже показан пример раздела <httpRuntime>.

<httpRuntime appRequestQueueLimit="100" executionTimeout="90"
  maxRequestLength="4096" minFreeLocalRequestFreeThreads="8"
  minFreeThreads="8" useFullyQualifiedRedirectUrl="false"
  versionHeader="1.1.4128" />

Одним из наиболее часто модифицируемых параметров <httpRuntime> является свойство maxRequestLength. Его обычно изменяют так, чтобы разрешить загрузку более крупных файлов. Однако помните, что каждый раз, когда вы увеличиваете это число, вы увеличиваете восприимчивость вашего сервера к атакам на отказ в обслуживании.

Ключевые моменты <httpRuntime>

Раздел <httpRuntime> позволяет настраивать несколько параметров, связанных со средой выполнения HTTP ASP.NET.

  • Свойство maxRequestLength управляет максимально возможным размером запроса в килобайтах, а также максимально допустимым размером закачиваемого файла, защищая сервер от атак на отказ в обслуживании.
  • Свойство appRequestQueueLimit устанавливает количество запросов в очереди, перед тем как пользователи начнут получать ошибку 503 Server Too Busy.

Работа с разделом <identity>

Раздел настроек <identity> позволяет настраивать параметры заимствования прав для вашего приложения ASP.NET. Заимствование прав – это способность приложения действовать от имени пользователя при доступе к другим ресурсам. После аутентификации пользователя в IIS его опознавательный признак передается в ASP.NET, где он может использоваться для персонализации пользователя в других ресурсах. Если пользователь не аутентифицирован в IIS, в приложение ASP.NET передается признак отсутствия аутентификации.

Пример из практики. Заимствование прав полезно при работе в среде интранет, которая использует аутентификацию Windows, где пользователи являются частью домена. После успешной аутентификации пользователя в IIS ASP.NET может использовать его права при доступе к общим файлам или серверам.

Ниже показан синтаксис раздела <identity>.

<identity impersonate="true | false" username="domain\username"
  password="password" />

Свойства раздела < identity > приведены в таблице 4.14.

Таблица 4.14. Свойства <identity>
Свойство Описание
impersonate Определяет, включено ли заимствование прав.

true Заимствование прав включено.

false Заимствование прав отключено.

username Определяет имя пользователя, используемое при включенном заимствовании прав.
password Определяет пароль, используемый при включенном заимствовании прав.

Имеется два режима заимствования прав, которые можно использовать в приложении. Первый режим использует имя пользователя и пароль, переданные из IIS, а второй режим – имя пользователя и пароль, указанные в настроечном файле. Ниже приведен пример реализации первого режима заимствования прав.

<identity impersonate="true" />

Такой метод заимствования прав использует любые имя пользователя и пароль, переданные из IIS в среду выполнения ASP.NET. Вот пример реализации второго типа заимствования прав.

<identity impersonate="true" userName="Microsoft\James"
  password="frequency" />
  1. Когда приложение пытается получить доступ к ресурсу, который требует аутентификации, для аутентификации в этом ресурсе используются указанные здесь имя пользователя и пароль. Хранение имени пользователя и пароля в формате простого текста, как в данном случае, ведет к проблемам безопасности. Файл .config защищен от запросов со стороны пользователей и доступ к нему через IIS или любой другой метод, основанный на веб, запрещен. Однако доступ к этим файлам возможен, если у пользователя есть доступ к серверу или заимствованные права на доступ к этому файлу. Имеется возможность хранить имя пользователя и пароль в зашифрованном формате в реестре. Это делается следующим образом. В настроечном файле установите значения имени пользователя и пароля в:
    <identity impersonate="true" userName=
      "registry:HKLM\Software\AspNetLogin\ASPNET_SETREG,userName"
      password=
      "registry:HKLM\Software\AspNetLogin\ASPNET_SETREG,password" />

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

  2. Чтобы установить значения в реестре, используйте консольное приложение aspnet_setreg.exe. Это небольшое приложение, которое можно скачать с Microsoft Download Center или напрямую по ссылке http://download.microsoft.com/download/asp.net/Utility/1.0/WIN98MeXP/EN-US/Aspnet_setreg.exe
  3. Распакуйте приложение, откройте командную строку и перейдите в директорию, в которую вы распаковали файлы.
  4. Введите в командной строке следующее:
    aspnet_setreg –k:Software\AspNetLogin\Identity – u:UserName –p:Password

    Замените AspNetLogin\Identity на тот ключ, который вы хотите использовать. Этот ключ будет создан автоматически. Замените UserName и Password на корректные значения имени пользователя и пароля для вашего приложения.

  5. Найдите ключ в реестре и проверьте, что процесс ASP.NET имеет доступ к этому значению, сделав щелчок правой кнопкой мыши на ключе и выбрав Permissions (Разрешения). Если имя пользователя ASP.NET не указано, добавьте его в список. Прежде чем права доступа вступят в силу, вы должны будете перезапустить процесс IIS.

После этого эти элементы в реестре будут зашифрованы и готовы для доступа из настроечных файлов.

Ключевые моменты <identity>

Раздел <identity> предоставляет параметры, которые включают и отключают заимствование прав для приложений ASP.NET.

  • Первый режим заимствования прав читает имя пользователя и пароль из опознавательного признака, переданного из IIS, и использует его для доступа к ресурсам.
  • Второй режим заимствования прав использует имя пользователя и пароль, указанные в настроечном файле.
  • aspnet_setreg.exe позволяет шифровать и сохранять имя пользователя и пароль в реестре, а затем читать эти значения из настроечного файла.

Работа с разделом <machineKey>

В ASP.NET имеется несколько объектов и ресурсов, которые должны быть зашифрованы с целью обеспечения защиты. Раздел <machineKey> содержит ключи проверки и расшифровки, используемые для шифрования некоторых объектов ASP.NET, включая данные cookie форм аутентификации, данные viewstate и информацию о состоянии сессии, расположенной вне основного процесса. Ниже приведен синтаксис раздела <machineKey>.

<machineKey validationKey="validation key"
  decryptionKey="decryption key" validation="validation setting" />

Свойства раздела <machineKey> приведены в табл. 4.15.

Таблица 4.15. Свойства <machineKey>
Свойство Описание
validationKey Определяет ключ, который будет использоваться для проверки зашифрованных данных. Если enableViewStateMAC в разделе <pages> установлен в значение true, то этот ключ создает код аутентификации сообщения (message authentication code – MAC), который гарантирует, что состояние представления не было изменено. Этот ключ также используется для создания идентификаторов приложения, работающего вне основного процесса, которые позволяют отдельно хранить состояние переменных сессии между различными сессиями.

AutoGenerate Указывает, что ASP.NET должна генерировать случайный ключ и хранить его в Local Security Authority. Если вы можете добавить модификатор IsolateApps, ASP.NET для каждого приложения сгенерирует уникальный зашифрованный ключ, используя ID приложения.

Specific Value Можно вручную указать ключ проверки так, что для всей веб-формы будет использоваться одно и то же значение этого ключа. Это значение должно иметь длину от 40 до 128 символов (20 – 64 байт).

decryptionKey Определяет ключ, который используется для шифрования и расшифровки данных форм аутентификации, а также для информации о состоянии представления при условии, что validation установлен в значение 3DES.

AutoGenerate Указывает, что ASP.NET должна генерировать случайный ключ и хранить его в Local Security Authority. Если вы добавите модификатор IsolateApps, ASP.NET для каждого приложения сгенерирует уникальный зашифрованный ключ, используя ID приложения.

Specific Value Можно вручную указать ключ проверки так, что для всей веб-формы будет использоваться одно и то же значение этого ключа. При использовании шифрования DES ключ должен иметь длину в 16 символов, а при использовании шифрования Triple DES – 48 символов. Triple DES используется только на тех системах, где доступно 128-битное шифрование.

validation Определяет тип шифрования, используемого для проверки данных.

SHA1 Указывает, что проверка будет использовать шифрование SHA1.

MD5 Указывает, что проверка использует шифрование MD5.

3DES Указывает, что проверка использует шифрование 3DES. Аутентификация с использованием форм по-прежнему использует SHA1.

Ниже показан пример раздела <machineKey>.

<machineKey validationKey="AutoGenerate, IsolateApps"
  decryptionKey="AutoGenerate, IsolateApps" validation="SHA1 " />

В этом примере оба ключа являются автогенерируемыми, и используется опция IsolateApps. Это набор параметров по умолчанию для файла machine.config.

Ключевые моменты <machineKey>

Раздел <machineKey> очень важен для внутренней работы ASP.NET, но он не относится к числу тех разделов, которые ежедневно используются при программировании. Ниже приведены ключевые моменты, относящиеся к этому разделу.

  • validationKey и decryptionKey могут генерироваться автоматически или задаваться вручную.
  • При работе с веб-формой следует указывать ключи вручную, так что они будут соответствовать друг другу по всей веб-ферме.
Геннадий Щербаков
Геннадий Щербаков

В начале года получил код dreamspark  H4RQ9-QJ6FD-YJWJT-P6FVF-HGXQZ. При  его вводе- сообщение что он просрочен.