2024/11/25 12:27:55

PHP

PHP: Hypertext Preprocessor (предварительный обработчик гипертекста). Интерпретируемый язык для создания активных веб-страниц, основанный на синтаксисе C, Java, Perl. Код программ на PHP (как и JavaScript, VBScript или ASP Краснодар) вставляется в HTML-код. При запросе пользователя веб-сервер просматривает документ, выполняет найденные в нем PHP-инструкции и результат их выполнения возвращает пользователю. Cтатическая часть документа, написанная на языке HTML, является всего лишь шаблоном, а изменяемая часть формируется при исполнении PHP-инструкций.

Содержание

2024

Обнаружена ошибка в PHP, позволяющая злоумышленникам захватить Linux

ФСТЭК 20 ноября опубликовала предупреждение о критической ошибке BDU:2024-09951[1], которая связана с целочисленным переполнением в модулях взаимодействия PHP c СУБД MS SQL Server (модуль dblib) и Firebird (firebird). Опасность ошибки оценивается в 9,8 из 10. Уязвимость существует в версиях PHP до 8.1.31, до 8.2.26 и до 8.3.14. В перечисленных версиях она исправлена, и именно эти версии рекомендуют к установке, в том числе, и специалисты ФСТЭК.

Целочисленное переполнение позволяет выполнить посторонний код. Поскольку PHP часто используется в Linux как язык для веб-разработки, в сервере приложений как раз и необходимы коннекторы к различным базам данных. Именно поэтому веб-приложения, построенные на связке PHP c СУБД MS SQL Server и Firebird, могут оказаться уязвимыми к указанной ошибке. Причем, велика вероятность, что такую ошибку злоумышленники могут проэксплуатировать удаленно – через веб-интерфейс. Наличие уязвимостей подтвердили пока только разработчики дистрибутивов Red Hat и Ubuntu, однако насколько ошибке подвержены российские дистрибутивы Linux, пока понять сложно.

Ошибка целочисленного переполнения в коде двух коннекторов PHP к базам данных

«
Российские дистрибутивы Linux не подвержены этой уязвимости, т.к. речь идет о компонентах dblib и firebird интерпретатора языка программирования PHP, а не об операционных системах, – заметил в разговоре с TAdviser Михаил Сергеев, ведущий инженер CorpSoft24. – PHP по умолчанию не используется в операционных системах и его необходимо устанавливать отдельно. Если в операционной системе используется уязвимая версия PHP с указанными компонентами, и сервис опубликован в сети интернет, то злоумышленник может выполнить произвольный код от пользователя веб-сервера.
»

В то же время под дистрибутивом Linux обычно подразумевается не только ядро операционной системы, но и набор компонент, которые совместимы и могут работать с ним без перекомпиляции. Именно поэтому часто в состав настольного дистрибутива Linux включается LibreOffice, а в состав серверных – СУБД и средства разработки веб-приложений. Именно поэтому разработчики дистрибутивов Red Hat и Ubuntu подтвердили наличие уязвимости в своих продуктах и необходимость обновления.

«
Сложно говорить за весь рынок, – заявил TAdviser Сергей Лунегов, директор по продуктам Axiom JDK. – Можем сказать, что клиенты Axiom Linux в безопасности, эта уязвимость их не затронула. Наши инженеры, разрабатывающие и поддерживающие контейнерную ОС Axiom Linux, оперативно изготовили и разместили безопасную версию пакета.
»

Ubuntu и Red Hat также разместили безопасную версию пакета. Теперь клиентам рекомендуется обновиться до новой версии, и клиенты ОС Axiom Linux не исключение. Следует отметить, что уязвимыми могут оказаться не только серверные веб-приложения, но и настольные или даже мобильные, если в них в качестве встроенного языка сценариев используется PHP и они взаимодействуют с внешними базами данных через уязвимые коннекторы.

«
Уязвимость затрагивает любые системы, где установлены и используются уязвимые версии библиотек dblib или firebird в составе PHP, – пояснил для TAdviser ситуацию Алексей Гришин, руководитель направления пентеста Infosecurity. – Это могут быть как серверные, так и десктопные или мобильные установки операционных систем, если на них развернуты приложения, использующие данные библиотеки. Точное количество российских компаний, подверженных риску, неизвестно. Однако любая организация, использующая PHP с уязвимыми версиями dblib или firebird, может стать целью атаки. Рекомендуется провести аудит используемых версий этих библиотек и при необходимости обновить их до защищённых версий.
»

Хакеры «воскресили» уязвимость в PHP, найденную ещё 12 лет назад. Под ударом тысячи серверов в России

ФСТЭК в начале июня включила в базу данных угроз и уязвимостей предупреждение с индексом BDU:2024-04432[2] об обнаруженной уязвимости в интерпретаторе PHP для Windows, которая позволяет исполнять вредоносные команды через интерфейс PHP CGI, используемый для взаимодействия с веб-сервером Apache. Опасность обнаруженной уязвимости оценивается по CVSS в 9,8 из 10. Утверждается, что есть достаточно простой метод ее эксплуатации.

Именно этой картинкой исследователи из DEVCORE проиллюстрировали обнаруженную уязвимость

Фактически сейчас был обнаружен обход механизма защиты от аналогичной уязвимости, найденной ещё в 2012 году (CVE-2012-1823). Тогда в PHP были встроены механизмы фильтрации спецсимволов при работе с CGI, однако в текущей ситуации разработчики не реализовали его для преобразования кодировки Best-Fit в ОС Windows. В результате у злоумышленников появилась возможность передавать вредоносные команды с помощью параметров запроса к веб-серверу.TAdviser Security 100: Крупнейшие ИБ-компании в России 57.8 т

Мнения о популярности связки Windows — Apache — PHP у экспертов расходиятся. Так, Алексей Трофимов, специалист группы внешнего тестирования интегратора безопасности «Бастион», заявил TAdviser следующее: «Связка PHP и Windows считается популярной в России. Ее используют около 40% серверов».

В то же время другие эксперты подобную связку оценивают как достаточно редкую. Михаил Сергеев, ведущий инженер CorpSoft24, считает, что сочетание PHP и Windows в России используется достаточно редко, так как Windows - платное коммерческое программное обеспечение с высокими аппаратными требованиями. Связка Windows и PHP может использоваться на локальном компьютере разработчика.

«
Чаще всего веб-сайты на PHP размещаются на Linux-серверах, а сочетание PHP и Windows характерно, скорее, для разработчиков, тестирующих свой код на собственном компьютере, недоступном из интернета, а потому вероятность эксплуатации новых уязвимостей невелика, — отметил Илья Поляков, руководитель отдела анализа кода Angara Security. — По данным ZoomEye, большинство таких серверов расположены в США - более 21 млн. В России их число ниже, чем в Иране, - около 16 тыс.
»

Статистика по использованию PHP на базе Winodws

«
Хотя PHP постепенно теряет долю на рынке, она по-прежнему остается значительной — почти 75%, — отметил в общении с TAdviser Александр Быков, руководитель направления сервисов защиты облачного провайдера «Нубес». — Доля же Windows в веб-разработке в основном связана с использованием IIS, на которую приходится около 12%. Что касается сочетания PHP и Windows, то такая конфигурация не самая распространенная. Это подтверждается тем, что в качестве операционных систем для веб-хостинга чаще используют Unix и подобные системы. Сейчас веб-приложения, работающие на Windows, скорее, относятся к унаследованным и требуют замены. Либо это приложения, которым нужна глубокая работа с .NET.
»

Следует отметить, что технология .NET сейчас активно используется для импортозамещения, поскольку она может работать как на Windows, так и на отечественных ОС. Поэтому вполне возможно, что количество уязвимых для данной ошибки серверов в последнее время увеличилось. Впрочем, 16 тыс. уязвимых устройств по версии ZoomEye — это хорошие показатели, хотя Россия, как было отмечено, по количеству таких серверов не находится на первом месте.

Уязвимость была обнаружена компанией Devcore ещё в начале мая[3]. Её исследователи передали сведения разработчикам PHP. В начале июня сообщество PHP выпустило новые версии своих интерпретаторов — 8.3.8 , 8.2.20 и 8.1.29, где уязвимость была исправлена. Обновление на эти версии является лучшим вариантом решения проблемы, однако оно не всегда возможно.

Сама ФСТЭК рекомендует следующее методы контроля уязвимости: ограничить возможности запуска CGI-скриптов, полученных из недоверенных источников; по возможности перейти с PHP CGI на более безопасную архитектуру (Mod-PHP, FastCGI или PHP-FPM); использовать SIEM-системы для отслеживания попыток эксплуатации уязвимости; настроить средства межсетевого экранирования уровня веб-приложений для ограничения возможности удалённого доступа. Алексей Трофимов добавляет: «хорошей мерой защиты будет настройка межсетевого экрана на паттерны, связанные с символом тире (%AD), в передаваемых параметрах к CGI-скриптам».

«
Учитывая тренд на импортозамещение ПО в России, проектов, где применяется сочетание PHP и Windows, становится все меньше, — отметил Станислав Орлов, технический директор производителя общесистемного и прикладного ПО ALMI Partner. — Мы рекомендуем компаниям, которые еще используют продукты Microsoft в такой связке с PHP, перейти на сертифицированные ФСТЭК Linux-дистрибутивы.
»

2019: Уязвимость, предоставляющая возможность удаленного взлома

27 октября 2019 года стало известно, что в ветке PHP 7 выявлена опасная уязвимость (CVE-2019-11043), предоставляющая злоумышленникам возможность выполнять команды на сервере, используя специально сформированный URL.

По данным экспертов, баг уже активно используется в атаках. Процесс его эксплуатации довольно простой, к тому же проблема усугубляется тем, что ранее на портале GitHub был размещен PoC-код для определения уязвимых серверов. Как пояснили специалисты, обнаружив уязвимый сервер, «атакующий может отправить специально сформированные запросы, добавив '?a=' в URL».

Отмечается, что проблема распространяется исключительно на NGINX-серверы с включенным PHP-FPM (программный пакет для обработки скриптов на языке PHP). Уязвимыми являются конфигурации nginx, где проброс в PHP-FPM осуществляется c разделением частей URL при помощи "fastcgi_split_path_info" и определением переменной окружения PATH_INFO, но без предварительной проверки существования файла директивой "try_files $fastcgi_script_name" или конструкцией "if (!-f $document_root$fastcgi_script_name)". Пример уязвимой конфигурации:

Пример уязвимой конфигурации
«
С помощью специально сформированного URL атакующий может добиться смещения указателя path_info на первый байт структуры _fcgi_data_seg. Запись нуля в этот байт приведет к перемещению указателя `char* pos` на ранее идущую область памяти, вызываемый следом FCGI_PUTENV перезаписывает некоторые данные (включая другие переменные ast cgi), - указывается в описании уязвимости.
»

С помощью данной техники злоумышленник может создать фиктивную переменную PHP_VALUE fcgi и добиться выполнения кода.

Разработчики выпустили патч для данной уязвимости 25 октября 2019 года. Всем пользователям настоятельно рекомендуется обновиться до версий PHP 7.3.11 и PHP 7.2.24[4].

2018: 62% всех сайтов рискуют быть взломанными из-за прекращаемых обновлений PHP

В октябре 2018 года стало известно о том, что большое количество сайтов в интернете находятся в зоне риска из-за предстоящего прекращения выпуска обновлений для устаревших версий PHP.

Как пишет издание ZDNet со ссылкой на данные W3Techs, к середине октября 2018 года на PHP работает в общей сложности 78,9% веб-ресурсов. 31 декабря завершается поддержка PHP 5.6.x, в результате чего вся ветка PHP 5.x начнет уходить в историю.

График прекращения поддержки различных версий PHP

К 14 октября 62% сайтов используют версии PHP 5.x, которые перестанут обновляться в начале 2019 года. Таким образом, сотни миллионов ресурсов могут попасть под угрозу взлома, если хакеры найдут уязвимости в устаревших версиях этого скриптового языка. Такие неисправности не будут устраняться, начиная с 1 января.

«
Это огромная проблема для экосистемы PHP, — говорит директор по разработкам Paragon Initiative Enterprise Скотт Арцишевски (Scott Arciszewski). — Хотя многие считают, что не могут вот так просто взять и отказаться от PHP 5 в 2019 году, такое решение [прекратить поддержку старых версий PHP] можно назвать беспечным.
»

По словам эксперта, любые крупные эксплуатируемые уязвимости в PHP 5.6 наверняка затронут и более новые версии. PHP 7.2 будет регулярно получать бесплатные патчи от команды PHP, а в случае PHP 5.6 можно будет получить обновление, только если пользователь платит за продолжающуюся поддержку производителю ОС, отметил Арцишевски.

Любопытно, что среди самых популярных систем управления контентом (WordPress, Joomla и Drupal) только Drupal официально повысила минимальные требования для CMS до PHP 7. Это правило вступит в силу в марте 2019 года. К середине октября 2018-го Joomla требует работу сайта на версии не старше PHP 5.3, а минимальное требование WordPress — PHP 5.2.[5]

2016

Альфа-тестирование PHP 7.1

10 июня 2016 года команда разработчиков PHP сообщила о готовности к тестированию первой альфа-версии значительной ветки языка программирования PHP 7.1. Релиз ожидается в ноябре 2016 года [6].


Значимые изменения

  • Добавлен тип возвращаемого значения void, указывающий на то, что функция не вернула значение;
  • При указании смещения внутри строки теперь можно указывать отрицательные значения, позиция в строке для которых будет рассчитана относительно конца строки. Например, для строки 'abcdef' $str[-2] вернёт "e";
  • Добавлен вариант конструкции list(), в которой могут задаваться ключи. Например: "list(1 => $oneBit, 2 => $twoBit, 3 => $threeBit) = $powersOfTwo";
  • Добавлено выражение "[] =", которое выступает альтернативой конструкции "list() =". Например, вместо "list($a, $b, $c) = array(1, 2, 3)" теперь можно указать "[$a, $b, $c] = [1, 2, 3]";
  • Реализована система вывода ошибок и предупреждений в случае использования в математических выражениях строк, не преобразуемых в число. Например, "10 apples" + "5 pears" приведёт к выводу ошибки "Notice: A non well formed numeric string encountered in example.php on line 3", а 5 * "orange" к "Warning: A non-numeric string encountered in example.php on line 3";
  • Возможность обработки нескольких типов исключений в одном выражении catch;
  • Поддержка определения видимости для констант внутри класса. Константы теперь могут определяться с флагами public, private и protected;
  • Возможность использования знака вопроса для пометки типов, которые могут принимать значение null.

Корректирующий выпуск PHP 7.0.2

7 января 2016 года стали доступны корректирующие выпуски языка программирования PHP 7.0.2, 5.6.17 и 5.5.31[7].

В состав выпусков вошли около 30 изменений, устранены шесть уязвимостей:

  • переполнение буфера в функциях escapeshell,
  • неверная обработка типов в XMLRPC,
  • две проблемы с изменением упорядочения пакетов в расширении WDDX,
  • возможность чтения из областей за пределами буфера в gdImageRotateInterpolated,
  • переполнение буфера в FPM.

Заодно устранено несколько ошибок, приводящих к падению интерпретатора и решена проблема с некорректной очисткой устаревших сеансов в расширении Session.

2015

Релиз PHP 7.0.0

3 декабря 2015 года выпущен официальный релиз PHP PHP 7.0.0. В него пошли изменения, подготовленные в рамках проекта PHPNG[8].

Эта ветка отличается значительной переработкой ряда подсистем, порцией дополнительных возможностей и наличием изменений, нарушающих совместимость. Скачок в номере версии подчёркивает значительность релиза и связывается с переходом к изменению в порядке нумерации выпусков, где разработчики ушли от лишней цифры в основных релизах (7.0 вместо 5.7.0).

Изменения в PHP 7:

  • Существенное увеличение производительности, благодаря применению новых методов организации работы с памятью и переходу на новые структуры хранения данных. В некоторых тестах PHP 7 до двух раз быстрее PHP 5.6;
  • Целостная поддержка 64-разрядных типов на 64-разрядных системах. В том числе возможность использования строк, размером до 2^31 байт, поддержка 64-разрядных значений integer при работе в Windows, поддержка больших файлов в 64-разрядных сборках.
  • Возможность обработки через исключения многих ошибок, ранее приводивших к принудительному завершению работы;
  • Новый оператор "??", позволяющий определить альтернативное значение, если не определён первичный объект присвоения. Например, для присвоения пустой строки, если не заполнен элемент ассоциативного массива теперь вместо isset($_GET['mykey']) ? $_GET['mykey'] : можно указать $_GET['mykey'] ?? "";
  • Возможность явного определения скалярных типов int, float, string и bool для аргументов и значений функций (например, "function foo(int $abc): int").
  • Режим жесткой проверки типов, включаемый директивой "declare(strict_types=1)", при котором несоответствие типа передаваемого функции или возвращаемого функцией значения будет приводить к ошибке.
  • Новый оператор комбинированного сравнения "<=>" с реализацией поведения, похожего на strcmp() и version_compare(), но через использование типового синтаксиса операторов сравнения. В частности, новый оператор позволяет не только проверить идентичность операндов, но и оценить какой из них больше другого (0 - равны, 1 - левый больше, -1 - правый больше);
  • Поддержка анонимных классов;
  • Поддержка группировки определений в операторе use (например, use Doctrine\Common\Collections\Expr\{ Comparison, Value, CompositeExpression };);
  • Новый метод Closure::call();
  • Дополнительный синтакс для встраивания unicode-строк \u{xxxxxx};
  • Поддержка задания массивов констант в операторе define();
  • Возможность использования зарезервированных ключевых слов в новых контекстах (например, можно определить функцию forEach и она не будет пересекаться с оператором foreach);
  • Синтаксис "yield from выражение" для делегирования фукциями-генераторами операций в перемещаемые объекты и массивы.
  • В дополнение openssl добавлена поддержка TLS-расширения ALPN (Application-Layer Protocol Negotiation) для согласования протоколов уровня приложений, используемых для обеспечения защищённого соединения. Используется в SPDY и HTTP/2;
  • Унификация синтаксиса определения переменных и переход к использованию AST (Abstract Syntax Tree). Изменение некоторой редкоиспользуемой семантики комбинирования переменных (например, $foo->$bar['baz'] теперь интерпретируется как ($foo->$bar)['baz'], а не $foo->{$bar['baz']}).
  • Прекращение поддержки конструкторов в стиле PHP 4, в которых имя конструктора совпадает с именем класса. Также прекращена поддержка статических вызовов нестатических методов;
  • Прекращение поддержки старых и не поддерживаемых вызовов SAPI и расширений: sapi/aolserver, sapi/apache sapi/apache_hooks, sapi/apache2filter, sapi/caudium, sapi/continuity, sapi/isapi, sapi/milter, sapi/nsapi, sapi/phttpd, sapi/pi3web, sapi/roxen , sapi/thttpd, sapi/tux, sapi/webjames, ext/mssql и ext/sybase_ct;

Преданонс PHP 7

23 апреля 2015 года Расмус Лердорф, создатель скриптового языка PHP, сообщил на конференции O'Reilly Fluent о грядущем выходе новой версии, заявляя что быстродействие среды возросло более чем вдвое: по его словам, именно такое ускорение наблюдалось в реальных веб-приложениях[9].

Выход первого релиз-кандидата PHP 7 запланирован на июнь 2015 года, финальная версия — в октябре 2015 года.

Символ PHP 7, 2015

PHP 7 основан на ветке phpng, созданной для устранения недоработок, связанных со структурами и типами данных, управлением памятью. Как подчеркнул Лердорф, PHP 7 экономнее расходует серверные ресурсы, поэтому на версию 7 надо переходить «всем, кто пользуется большим количеством серверов».

PHP 7 основан на абстрактном синтаксическом дереве, посредством чего, по мнению создателя языка, упрощается разработка вспомогательных инструментов, статический анализ и профилирование кода. Функции в PHP 7 могут возвращать массивы, введена строгая типизация.

В этой версии не будут поддерживаться некоторые функции PHP 4, отметил Лердорф, так что код двенадцатилетней давности может не отработать в новой версии интерпретатора.

Первая альфа-версия PHP 7 стала доступна для тестирования

11 июня 2015 года команда разработчиков сообщила о доступности для тестирования ветки языка программирования PHP 7.0.0 Alpha 1. Релиз запланирован на 12 ноября 2015 года[10].

Значимые изменения:

  • Существенное увеличение производительности, посредством применения новых методов организации работы с памятью и перехода на новые структуры хранения данных. В некоторых тестах PHP 7 до двух раз быстрее PHP 5.6;

  • Целостная поддержка 64-разрядных типов на 64-разрядных системах. В том числе, возможность использования строк размером до 2^31 байт, поддержка 64-разрядных значений integer при работе в Windows, поддержка больших файлов в 64-разрядных сборках.

  • Возможность обработки через исключения многих ошибок, ранее приводивших к принудительному завершению работы;

  • Новый оператор "??", допускающий определение альтернативного значения, в случае если не определён первичный объект присвоения. Например, для присвоения пустой строки, если не заполнен элемент ассоциативного массива теперь вместо isset($_GET['mykey']) ? $_GET['mykey'] : можно указать $_GET['mykey'] ?? "";

  • Реализована возможность явного определения скалярных типов int, float, string и bool для аргументов и значений функций (например, "function foo(int $abc): int").

  • Режим жесткой проверки типов, включаемый директивой "declare(strict_types=1)", при котором несоответствие типа передаваемого функции или возвращаемого функцией значения будет приводить к ошибке.

  • Новый оператор комбинированного сравнения "<=>" с реализацией поведения, похожего на strcmp() и version_compare(), но через использование типового синтаксиса операторов сравнения. В частности, новый оператор позволяет не только проверить идентичность операндов, но и оценить какой из них больше другого (0 - равны, 1 - левый больше, -1 - правый больше);

  • Поддержка анонимных классов;

  • Поддержка группировки определений в операторе use (например, use Doctrine\Common\Collections\Expr\{ Comparison, Value, CompositeExpression };);

  • Новый метод Closure::call();

  • Дополнительный синтакс для встраивания unicode-строк \u{xxxxxx};

  • Поддержка задания массивов констант в операторе define();

  • Возможность использования зарезервированных ключевых слов в новых контекстах (например, можно определить функцию forEach и она не будет пересекаться с оператором foreach);

  • Новый синтаксис "yield from выражение" для делегирования фукциями-генераторами операций в перемещаемые объекты и массивы.

  • В дополнение openssl добавлена поддержка TLS-расширения я ALPN (Application-Layer Protocol Negotiation) для согласования протоколов уровня приложений, используемых для обеспечения защищённого соединения. Используется в SPDY и HTTP/2;

  • Унификация синтаксиса определения переменных и переход к использованию AST (Abstract Syntax Tree). Изменение некоторой редко используемой семантики комбинирования переменных (например, $foo->$bar['baz'] теперь интерпретируется как ($foo->$bar)['baz'], а не $foo->{$bar['baz']}). Достаточно большая порция изменений, нарушающих совместимость;

  • Прекращение поддержки старых и не поддерживаемых вызовов SAPI и расширений: sapi/aolserver, sapi/apache sapi/apache_hooks, sapi/apache2filter, sapi/caudium, sapi/continuity, sapi/isapi, sapi/milter, sapi/nsapi, sapi/phttpd, sapi/pi3web, sapi/roxen , sapi/thttpd, sapi/tux, sapi/webjames, ext/mssql и ext/sybase_ct;

Проведена коррекция версий PHP 5.6.10, 5.5.26 и 5.4.42

11 июня 2015 года стало известно о выпуске корректирующих выпусков языка программирования PHP 5.6.10, 5.5.26 и 5.4.42, где устранены восемь уязвимостей и исправлены около десяти ошибок.

  • В функцию mail() добавлена защита от подстановки дополнительных заголовков.

  • В расширении FTP устранено целочисленное переполнение, которое может привести к выполнению кода.

  • В функции escapeshellarg устранена уязвимость позволяющая осуществить подстановку команд операционной системы при экранировании спецсимволов в аргументах к функции system().

  • Две уязвимости устранены в расширении PCRE (CVE-2015-2325, CVE-2015-2326) и три в Sqlite3 (CVE-2015-3414, CVE-2015-3415, CVE-2015-3416).

Апдейт PHP 5.4.44, 5.5.28 и 5.6.12. Устранены 12 уязвимостей

7 августа 2015 года стали доступны корректирующие выпуски PHP 5.6.12, 5.5.28 и 5.4.44, где устранены двенадцать уязвимостей, исправлена группа ошибок[11].

Большая часть уязвимостей может привести к отказу в обслуживании и проявляется в дополнениях (SPL, GD, SOAP, ODBC и OpenSSL). Уязвимость выявлена и в коде работы с директориями. Не обошлось без уязвимостей в функции серийности данных (unserialize) - 69793 и 70121.

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

2014: Самыми уязвимыми для хакеров оказались сайты на PHP

Атака на корпоративный сайт не только нарушает работу онлайновых услуг и подрывает репутацию владельцев, но зачастую становится первым этапом взлома внутренних сетей крупных компаний. При этом, согласно исследованию компании Positive Technologies (Позитив Текнолоджиз), в последнее время заметно возросло количество сайтов с уязвимостями высокой степени риска. Исследователи выявили самые распространенные уязвимости и оценили, насколько эффективны методы их обнаружения.

Всего в ходе тестов по анализу защищенности, проводившихся компанией в 2013 году, было изучено около 500 веб-сайтов, для 61 из них проводился более углубленный анализ. Значительная часть исследованных порталов принадлежала банкам — из-за участившихся атак в этой сфере. Также увеличился спрос на анализ безопасности сайтов СМИ, что связано с громкими случаями их взломов и распространения дезинформации. Кроме того, исследовались сайты государственных учреждений, промышленных предприятий и телекоммуникационных компаний.

Выяснилось, что 62% сайтов в 2013 году содержали уязвимости высокой степени риска. Данный показатель существенно выше прошлогоднего (45%). Больше всего приложений с уязвимостями высокой степени риска было выявлено на сайтах СМИ (80%). Что касается сайтов дистанционного банковского обслуживания, то ни одна из исследованных систем ДБО не соответствовала полностью требованиями стандарта безопасности PCI DSS.

Самая распространенная уязвимость 2013 года — межсайтовое выполнение сценариев (Cross Site Scripting) — встречается на 78% исследованных сайтов. Данный недостаток позволяет атакующему влиять на содержимое веб-страницы, отображаемой в браузере пользователя, в том числе с целью распространения вредоносного кода или получения учетных данных жертвы. Например, в случае уязвимой системы интернет-банкинга злоумышленник может сформировать ссылку, относящуюся к реальному сайту банка, при переходе по которой пользователь увидит фальшивую форму авторизации. Введенные пользователем данные будут направлены на сервер злоумышленника.

На втором месте по популярности (69%) — недостаточная защита от подбора идентификаторов или паролей пользователей (Brute Force), например вследствие отсутствия или некорректной реализации механизма CAPTCHA. В топ-10 также вошли две уязвимости высокой степени риска — «Внедрение операторов SQL» (43%) и «Внедрение внешних сущностей XML» (20%).

Самыми небезопасными оказались сайты, написанные на языке PHP: 76% из них содержат критические уязвимости. Менее уязвимы веб-ресурсы на Java (70%) и ASP Краснодар.NET (55%). Опасная уязвимость «Внедрение операторов SQL» встречается на 62% сайтов, написанных на PHP; для других языков данный показатель значительно ниже.

Специалисты Positive Technologies также провели сравнительный анализ тестирования приложений методами черного, серого и белого ящиков. Метод черного ящика подразумевает исследование системы без получения данных о ней со стороны владельца; метод серого ящика предполагает нарушителя, который обладает некоторыми привилегиями в системе; и наконец, метод белого ящика означает анализ с использованием всех внутренних данных о системе, включая исходные коды программ.

Среди веб-ресурсов, исследованных методами черного и серого ящиков, на 60% сайтов нашлись критические уязвимости. Для метода белого ящика этот показатель выше — 75%.

Из среднего количества уязвимостей, приходящихся на одну систему, следует, что тестирование методом белого ящика позволяет обнаружить почти в 10 раз больше критических уязвимостей, чем тестирование методами черного и серого ящиков. При возможности анализировать исходные коды веб-приложений метод белого ящика является предпочтительным. Но пока владельцы сайтов прибегают к нему редко: этим методом были исследованы лишь 13% веб-ресурсов.

2012: PHP 5.4.0

Команда разработчиков PHP анонсировала в марте 2012 года новый релиз популярного языка программирования PHP 5.4.0.

Отмечается, что в этот релиз вошли новые синтаксические конструкции, в числе которых инструментарий для повторного использования кода, называемый трейтом (trait) с поддержкой единого наследования; краткая запись массивов ($a = [1, 2, 3, 4]; или $a = ['one' = 1, 'two' = 2, 'three' = 3, 'four' = 4]) и др.

В PHP 5.4.0, по утверждению разработчиков, увеличена производительность и уменьшен объем потребляемой оперативной памяти; улучшены сообщения об ошибках и предупреждения; введена поддержка многобайтовых кодировок во всех сборках PHP, которая может быть включена и выключена в настройках.

Для удобства разработки и тестирования в режиме командной строки — CLI (Command LineInterface) — в PHP 5.4.0 появился встроенный вебсервер.

Кроме того, в новую версию внесены обратно-несовместимые изменения, предусматривающие следующие изъятия из языка (как устаревшие): использование глобальных переменных (Register_Globals); директиву magic quotes (т.н. `волшебные кавычки`); safe mode (безопасный режим); конструкции break/continue $var; опции allow-call-time-pass-reference.

Сообщается, что версия 5.4.0 будет последней, в которой будут официально поддерживаться ОС Windows XP и Windows 2003. По заявлению разработчиков, для этих ОС в следующих версиях PHP бинарные сборки создаваться не будут.

Языки программирования

Смотрите также

Примечания