Все лгут

Вчера наткнулся на недокументированные функции Loader, сегодня набрёл на давний пост на форуме ionCube, где Nick Lindridge (гендиректор ionCube Ltd или кто-то в этом духе) рассказывал интересующемуся пользователю, что функции _dyuweyrj4() и _dyuweyrj4r() при вызове возвращают «жемчужины мудрости». Далее »

Автор: , опубликовано в: Zend, Безопасность, комментариев: 2
28
Окт
2010

Интересно…

Как выяснилось, у Loader есть две недокументированных настройки в ini-файле: phpd.t и phpd. Что интересно, если значение phpd отлично от единицы или On, ionCube вылетает на зашифрованных файлах.

А еще у ionCube есть несколько недокументированных функций:

  • _dyuweyrj4() — при вызове без аргументов выдаёт «умные фразы» типа Do good, reap good; do evil, reap evil. или A rat who gnaws at a cat's tail invites destruction.
  • _dyuweyrj4r() — аналогично предыдущей;
  • ioncube_loader_iversion() — возвращает версию ionCube Loader в числовом виде: XYYZZ (например, 3.3.20 будет 30320);
  • ioncube_file_not_permissioned() — судя по всему, эта функция оставлена для обратной совместимости со старыми скриптами: выдаёт ошибку вида The file %s is not permissioned for this server.
  • _il_exec() — а это очень интересная функция: просто так её не вызвать. Но именно она ответственна за выполнение зашифрованного содержимого.

Далее »

Автор: , опубликовано в: Безопасность, комментариев: 1
27
Окт
2010

Создание пользовательских классов из расширений PHP

Задача: нужно создать класс из расширения , при этом созданный класс должен быть виден только в пределах выполнения одного запроса. При этом должно поддерживаться наследование классов, реализация интерфейсов, а также автоматическая загрузка классов (spl_autoload_register/__autoload).

Зачем это нужно: /Zend обычно гораздо быстрее PHP-кода. Капитан Очевидность не может не заметить, что вынесение критичных по быстродействию и потреблению памяти участков кода в расширение PHP позволяет снизить объём потребляемой памяти («родные» типы данных языка C компактнее zval) и увеличить быстродействие (машинный код выполняется явно быстрее интерпретируемого).

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

Автор: , опубликовано в: Zend, комментариев: 3
5
Окт
2010

Особенности работы функции checkdnsrr()

Функция checkdnsrr() используется для проверки существования записей . Например, фреймворк Kohana использует эту функцию для проверки наличия MX-записи домена, указанного в адресе электронной почты.

Тем не менее, существуют некоторые подводные камни, связанные с использованием данной функции, о которых разработчикам нужно знать. Далее »

Автор: , опубликовано в: PHP, комментариев: нет
24
Сен
2010

Небуферизованные запросы: снижаем потребление памяти WordPress

Пиковое потребление оперативной памяти можно снизить приблизительно два раза и практически бесплатно. В чём секрет? В использовании правильных функций для работы с базой данных.

Опытные программисты знают, что API предоставляет два варианта работы с результатом запроса:

  1. Последовательная обработка результата — при этом не происходит никакой буферизации результата, данные отдаются от сервера клиенту, минуя временные таблицы и буфера. В этом случае обработка результатов может производиться только последовательно.
  2. Буферирование результата запроса — результат полностью читается во временный буфер, что позволяет осуществлять произвольный доступ к результату.

Далее »

Автор: , опубликовано в: WordPress, комментариев: 26
2
Сен
2010

DoS для PHP через imap_fetchbody

Как оказалось, если передать функции imap_fetchbody() параметр $secton, длина которого больше 1004 байт, падает по segmentation fault. На некоторых конфигурациях с применением некоторых усилий (подробности, понятное дело, разглашаться не будут) получалось вместе с положить и Apache. Далее »

Автор: , опубликовано в: PHP, комментариев: 2
16
Авг
2010

Быдлокодеры хреновы :-(

Возился сейчас с расширением Memcache; после очередного изменения кода сервер ушёл в глухую защиту и отказался реагировать на внешние раздражители. Далее »

Автор: , опубликовано в: PHP, комментариев: 5
27
Мар
2010

Исправление ошибки с поддержкой VERP в PHPMailer

PHPMailer — класс для отправки почты из ; используется многими известными приложениями, в том числе и .

VERP — техника, упрощающая автоматическое определение и удаление email-адресов из списков рассылки, сообщения которым не могут быть доставлены.

Поддержка VERP в хоть и реализована, но не работает. Далее »

Автор: , опубликовано в: PHP, комментариев: нет
2
Фев
2010

Патч для php-cgi, позволяющий конфигурировать значение listen backlog

По умолчанию значение listen backlog в -cgi жёстко задано — 128. Это означает, что не сможет обработать более 128 запросов одновременно (точнее, что очередь запросов не сможет превысить данного значения). Я столкнулся с тем, что 128 — это мало.

Для тех, кто столкнулся с данной проблемой, но по каким-либо причинам не хочет/не может поставить php-fpm (в котором backlog конфигурируется), я сделал небольшой . Далее »

Автор: , опубликовано в: C/C++, PHP, комментариев: 10
3
Янв
2010

Простой DoS для PHP

Копался сегодня во внутренностях , и обнаружил такую вещь: функция zend_hash_sort() (она вызывается из функций типа usort() и прочих) сортирует не сам массив (в терминах ), а массив (в терминах языка C) указателей на элементы массива (в терминах ), а потом по отсортированному C-массиву пересоздаёт PHP-массив. Далее »

Автор: , опубликовано в: PHP, Безопасность, комментариев: 3
19
Окт
2009