Укрощение @Интернет@

Только кончая задуманное сочинение, мы


" Только кончая задуманное сочинение, мы уясняем себе, с чего нам следовало его начать".
Блез Паскаль


Когда для решения поставленной задачи возможностей "голого" HTML оказывается недостаточно, приходится прибегать к вызову внешних программ, взаимодействующих с web-сервером через cgi-интерфейс. Такие программы могут быть написаны на любом языке, хоть на Бейсике, но исторически сложилось так, что в подавляющем большинстве случаев для их разработки используется Perl.
Это лаконичный, немногословный, мощный и в то же время легкий в освоении язык, реализованный практически на всех существующих платформах и операционных системах. Он выгодно отличается от Си отсутствием характерных для последнего проблем переполнения буферов. Однако, несмотря на все свои достоинства, с точки зрения безопасности Perl – едва ли не худший выбор.
Изначально Perl предназначался для разработки средств управления и мониторинга многоуровневых сетей – локальных приложений, нетребовательных к защищенности. Неудивительно, что создатели Perl сочли удобство эксплуатации более приоритетным, чем обеспечение безопасности. Типичный пример: вызов open
может не только открывать файл, но и запускать его, если в имени присутствует символ конвейера. Излишняя гибкость и самостоятельность языка заметно ускоряют программирование, но создают проблемы при написании серверных приложений, обязанных не допустить выполнение любых действий, явно не санкционированных разработчиком.
Никогда нельзя быть уверенным, что все клиенты будут использовать программу "как нужно", а не "как можно". Помимо непреднамеренных ошибок пользователей, большую угрозу представляют злоумышленники, пытающиеся найти такие запросы, обработка которых причинила бы урон серверу.
Проблема усугубляется тем, что большинство скриптов разрабатываются непрофессионалами, порой только-только осваивающих Perl. Неудивительно, что при этом практически всегда допускаются ошибки, приводящие к уязвимости скрипта. На сегодняшний день качественный скрипт – скорее исключение, чем правило. Ошибки нередко обнаруживаются и в профессиональных (вернее, претендующих на это звание) продуктах. Все скрипты Мэта Райта, приведенные в его книге "CGI/Perl", и получившие в результате этого большую распространенность, некорректно фильтруют ввод пользователя, допуская тем самым возможность атаки на сервер.
Создание безопасных серверных приложений представляет серьезную проблему, решению которой и посвящена настоящая глава. (см. так же "Техника сетевых атак" Криса Касперски)


Сокеты (sockets) представляют собой высокоуровневый унифицированный интерфейс взаимодействия с телекоммуникационными протоколами. В технической литературе встречаются различные переводы этого слова – их называют и гнездами, и соединителями, и патронами, и патрубками, и т.д. По причине отсутствия устоявшегося русскоязычного термина, в настоящей статье сокеты будет именоваться сокетами и никак иначе.
Программирование сокетов не сложно само по себе, но довольно поверхностно описано в доступной литературе, а Windows Sockets SDK содержит многоженство ошибок как в технической документации, так и в прилагаемых к ней демонстрационных примерах. К тому же имеются значительные отличия реализаций сокетов в UNIX и в Windows, что создает очевидные проблемы.
Автор постарался дать максимально целостное и связанное описание, затрагивающее не только основные моменты, но и некоторые тонкости не известные рядовым программистам. Ограниченный объем журнальной статьи главы, непосредственно не относящейся к основой теме книги, не позволяет рассказать обо всем, поэтому, пришлось сосредоточиться только на одной реализации сокетов – библиотеке Winsock 2, одном языке программирования – Си\Си++ (хотя сказанное большей частью приемлемо к Delphi, Perl и т.д.) и одном виде сокетов – блокируемых синхронных сокетах.


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

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