PCGI

PCGI (от англ. Perl Common Gateway Interface) — библиотека к языку программирования Perl для работы с интерфейсом CGI (Common Gateway Interface).

Библиотека позволяет с высокой скоростью обрабатывать входящий поток данных. Основное достоинство заключается в том, что библиотека позволяет совершенно безопасно принимать сколь угодно крупные объёмы данных, при этом очень экономично потребляя оперативную память.

Например, используя PCGI можно принять (при достаточно высокоскоростном Интернет-соединении или сети) файл, размером 500 Мб и более, расходуя мизерный объём оперативной памяти, потребляемой библиотекой при приеме данных (не более 2 Мб, без учёта принятого массива данных).

Кроме того, решается один из серьёзных вопросов безопасности: злонамеренно сформированный сложный запрос такого размера не перегрузит сервер. В качестве сравнения можно рассмотреть стандартные методы защиты:

  • наложение ограничения на объём принимаемых данных;
  • наложение ограничения на объём используемой на эти цели оперативной памяти;
  • наложение ограничений на ресурсы сервера по времени разбора или по степени загрузки системы.

В данной библиотеке применен оригинальный метод защиты. Как правило, разработчик всегда знает какое максимальное количество элементов может содержать конкретная веб-форма. Чаще всего это небольшое число (например, 10—20 элементов), однако, в редких случаях, это число может достигать сотен или, даже, тысяч элементов. Несмотря на то, что вредоносный запрос может подходить по допустимому размеру, он может содержать такое количество элементов, которое перегрузит сервер. Данный момент наиболее уязвим для хакерских атак. Например, двухмегабайтный запрос может на минуту перегрузить современный компьютер (с частотой процессора 3 ГГц), при потреблении памяти от 50—200 Мб. Эти данные получены путём тестирования множества библиотек различных языков. PCGI же позволяет ограничить количество принимаемых элементов и, тем самым, обезопасить прием больших объёмов данных. Ограничение в 1000 или даже более элементов не даст злоумышленнику возможности перегрузить сервер. Для ощутимых перегрузок, запрос должен содержать сотни тысяч и более элементов.

Библиотека полностью соответствует спецификации веб-форм комитета W3C, включая поддержку формата данных multipart/mixed.

См. также

Ссылки