Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СРС_ИПОВС_МСЗИ.doc
Скачиваний:
41
Добавлен:
05.06.2015
Размер:
1.79 Mб
Скачать

Переполнение буфера

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

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

Главная связанная с этим проблема (кроме, конечно, того, что большинство покупателей крайне недовольны обилием ошибок и неисправностей, ведь они считают, что за полную цену приобрели протестированный продукт) состоит в угрозе безопасности всей системы.

Разработчики просто физически не успевают сделать программу достаточно устойчивой, что влечет за собой многие неприятности. Одна их них — это отсутствие нормальной проверки ошибок. Контроль входных данных заключается в проверке и анализе той информации, что поступает к программе. Например, если программа ожидает ввод цифр, а вместо этого поступают буквы, система контроля проверяет входные данные, и если они неправильные, не допускает их к дальнейшей обработке, выводя сообщение об ошибке. Основная задача такой проверки состоит в предотвращении обработки неправильных данных. Без нее программа принимает информацию и допускает ее к переработке, что приводит к переполнению буфера и другим неприятностям. Проверка ошибок может проводится двумя способами: либо самой программой, что предпочтительнее, либо внешней оболочкой, которая вызывает приложение. Последний способ получил широкое распространение в технологиях Internet, таких, как CGI (Common Gateway Interface). Большинство программ CGI вызываются не прямым обращением, а через Web-страницу, которая получает введенные пользователем данные и направляет их на дальнейшую обработку к программе CGI. В этом случае оболочкой служит Web-страница, она осуществляет проверку соответствия введенной информации. При этом контроль может проводить и сама CGI-программа, если такая возможность в ней предусмотрена.

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

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