Безопасность IIS

       

Перехват ошибок


Обычно веб-разработчики ограничены во времени и, как правило, ставят на первое место внешний вид, удобство работы и функциональность, а о безопасности думают далеко не в первую, если не в последнюю, очередь. В лекции 9 говорилось о том, что такой подход недопустим при разработке содержимого для интернета. Разработка и тестирование должны проводиться в автономном режиме для успешного устранения всех угроз безопасности создаваемых сценариев, а это возможно при таком выполнении сценария, когда семантические ошибки программирования выявляются сами по себе.

Синтаксические ошибки находить легко, так как программный компилятор или интерпретатор прерывает выполнение кода и обозначает строку с синтаксической ошибкой. Плохо обученный разработчик исправит свои синтаксические ошибки, после чего отгрузит новый код, уверенный в отсутствии ошибок. Однако семантические ошибки или ошибки времени выполнения могут возникнуть во время непосредственного выполнения программы, что позволяет выявить исходный код любым пользователем, запустившим сценарий. Например, при добавлении шестого товара в корзину покупок электронного магазина произойдет семантическая ошибка, если максимальное число товаров для покупки, установленное в программе, равно пяти.

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

Поскольку идеально написанного кода не существует, необходимо обеспечить поддержку активным содержимым непредвиденных ошибок и отображение соответствующих уведомлений об их возникновении. По умолчанию файл 500-100.asp обрабатывает все ошибки, возникающие при компиляции или запуске файлов .asp.
При возникновении ошибки ASP IIS возвращает файл 500-100.asp с информацией о ней, например, номер строки, в которой произошла ошибка, и ее описание.

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

Листинг 11.1.

(html, txt)

Обработка ошибок устанавливается на главном уровне, веб-уровне или уровне каталога посредством изменения свойств сообщений об ошибках HTTP, передаваемых клиентам при их возникновении.

Для настройки IIS на отображение сообщения об ошибке откройте консоль Internet Services Manager (Диспетчер служб интернета) и щелкните правой кнопкой мыши на нужном сервере или веб-сайте. Выберите команду Properties (Свойства), откройте вкладку Custom Errors (Другие ошибки) и прокрутите вниз список сообщений об ошибках, чтобы отобразить HTTP Error 500;100 (см. рис. 11.11).

Нажмите на кнопку Edit Properties (Изменить параметры) для изменения параметров сообщения об ошибке, указав созданную или измененную страницу с текстом уведомления (см. рис. 11.12).

Совет. Убедитесь, что файл обработки ошибок не содержит синтаксических ошибок или ошибок времени выполнения; если в коде присутствуют ошибки, они отобразятся в веб-браузере. Строка 5 приведенного выше кода On Error Resume Next обеспечивает выполнение файла без возникновения ошибок.


Рис. 11.11.  Измененные страницы с информацией об ошибках предоставляют вам и вашим пользователям полезные данные


Рис. 11.12.  Если типом выводимых данных является URL, то этот URL должен существовать на локальном сервере



'Зафиксировать ошибку в файле журнала. 'Изменить путь к файлу журнала для конкретной системы. 'Нужно присвоить учетной записи IUSR_имя-компьютера разрешение на 'запись и изменение файла. strErrorLog = "D:\temp\custom_error.log" set objFSO = Server.CreateObject("Scripting.FileSystemObject") Set objTStream = objFSO.OpenTextFile(strErrorLog, 8, True) '8 = ForAppending If Err.Number = 0 Then objTStream.WriteLine strErrorMsg & vbCrlf End If If Err.Number = 0 Then objTStream.Close blnLogFail = False Else blnLogFail = True End If 'Вывод сообщения в веб-браузере. %> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <HTML> <HEAD> <TITLE>Error</TITLE> </HEAD> <P>К сожалению, запрошенная вами страница содержит ошибку и не может быть отображена.</P> <% 'Добавить ссылки для возврата на предыдущую или домашнюю страницу. strReferrer = Request.ServerVariables("HTTP_REFERER") If Len(strReferrer) Then Response.Write "<p><A HREF=""javascript:history.go(-1)"">Вернуться на предыдущую страницу</A></P> End IF Response.Write "<P>Возврат на <A HREF=""http://www.ваш_домен.com""> домашнюю страницу</A></P> %> </P> <P>Пожалуйста, обратитесь к <A HREF="mailto:webmaster@ваш_домен.com">веб-мастеру</A> для выяснения причин возникновения данной проблемы</P> </BODY> </HTML>

Листинг 11.1.

Обработка ошибок устанавливается на главном уровне, веб-уровне или уровне каталога посредством изменения свойств сообщений об ошибках HTTP, передаваемых клиентам при их возникновении.

Для настройки IIS на отображение сообщения об ошибке откройте консоль Internet Services Manager (Диспетчер служб интернета) и щелкните правой кнопкой мыши на нужном сервере или веб-сайте. Выберите команду Properties (Свойства), откройте вкладку Custom Errors (Другие ошибки) и прокрутите вниз список сообщений об ошибках, чтобы отобразить HTTP Error 500;100 (см.


рис. 11.11).

Нажмите на кнопку Edit Properties (Изменить параметры) для изменения параметров сообщения об ошибке, указав созданную или измененную страницу с текстом уведомления (см. рис. 11.12).

Совет. Убедитесь, что файл обработки ошибок не содержит синтаксических ошибок или ошибок времени выполнения; если в коде присутствуют ошибки, они отобразятся в веб-браузере. Строка 5 приведенного выше кода On Error Resume Next обеспечивает выполнение файла без возникновения ошибок.


Рис. 11.11.  Измененные страницы с информацией об ошибках предоставляют вам и вашим пользователям полезные данные


Рис. 11.12.  Если типом выводимых данных является URL, то этот URL должен существовать на локальном сервере


Содержание раздела