18 сентября 2009 г. PHP Segmentation failed Suhosin

PHP. heap corruption detected в phpQuery и Segmentation fault в PHP CLI

suhosin_bug

После переустановки PHP 5.2.10 столкнулся я с такой проблемой как "linked list corrupt on efree() - heap corruption detected" при использовании библиотеки phpQuery, а также "Segmentation fault" в CLI версии свежеустановленного PHP.

Ошибка "linked list corrupt on efree() - heap corruption detected" проявлялась только в одном месте, и связана была с DOM модулем, как мне казалось. До переустановки я не юзал phpQuery в продакшене, поэтому не мог сказать однозначно повлияла ли это переустановка, или так и было бы с ошибкой.

При запуске любого скрипта в CLI режиме, было нечто подобное:

php -f /www/script.php
Segmentation fault

Решение проблемы с Segmentation fault в CLI

Погуглив немного, не нашел ничего путного и запостил на Пыху топик о своей проблеме, пару дней мы думали по этой теме, предлагались разные решения и побороли в первый день "Segmentation fault" в CLI, путем упорядочивания PHP модулей (спасибо пользователю OFF), сейчас у меня так:

extension=mbstring.so
extension=simplexml.so
extension=spl.so
extension=mysqli.so
extension=mysql.so
extension=session.so
extension=mcrypt.so
extension=gd.so
extension=json.so
extension=ctype.so
extension=iconv.so
extension=hash.so
extension=curl.so
extension=zlib.so
extension=imagick.so
extension=ffmpeg.so
extension=sphinx.so
extension=pcre.so
extension=memcache.so
extension=memcached.so
extension=dom.so

С тех пор CLI работал исправно и работает до сих пор.

Решение проблемы с heap corruption detected в phpQuery

Признаюсь, я грешил на PHP-модуль "php5-dom", однако проблема оказалась не в нем. Ошибка была вида:

[Thu Sep 17 01:48:23 2009] [error] [client 93.111.111.111] ALERT - linked list corrupt on efree() - heap corruption detected (attacker '93.111.111.111', file '/path/to/kinsburg/path/to/libs/phpquery.php', line 5689), referer: http://kinsburg.ru/path/to/admin/path/to/parser/

где, 93.111.111.111 - ip-адрес моего локального компьютера (аля клиент)

Решение оказалось совсем для меня не очевидным, во всем оказался виноват "Suhosin Patch", который нужен для обеспечения безопасности. Я просто переустановил PHP, но в этот раз отключил Suhosin.

На эту мысль меня натолкнул пост пользователя OFF с Пыха.ру, за что ему огромное спасибо! Были еще варианты решения этой проблемы, но они не венчались успехом.

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

Комментарии

сухосина фтопку, скрипты на php либо самостоятельно, либо тотальная проверка с оладкой,всех переменных всех методов и классов, с максимальным уровнем предупреждений и исправлением любой баги,любой пустой переменной,с полным осознанием того что написано в скрипте, что он делает и для чего нужен. Во всех подозрительных местах либо написать свой вариант (часто получается изящьнее), либо переименовать переменные (переименовать-переменные =D )
исключить из скрипта символы подавления @ ошибок.
переписать проверки входных данных (если такие есть)
магические кавычки - фтопку только мешают,использовать placeholderы для обращения к базе...

безопасность-безопасность, не надо писать или использовать дырявые скрипты тогда и suhosin не нужен будет...

agat, ага, но не всегда свой код используется (WP, Drupal, etc).

кстати, упорядочивание пхп-экстеншнов — херь полная
единственное, spl надо перед мусклем ставить, а в остальном — бред, по-моему

epsyl, ага, по твоему. Есть целые патчи сортирующие экстеншены в правильном порядке.

Расстановка важна - 100%
epsyl - попробуй на досуге поменять местами, все рухнет...

З.Ы. я пробовал =)

интересно решил проблему

http://php-fpm.anight.org/downloads/freebsd-port/

Pandora, что вы этим хотели сказать?

Оставьте свой комментарий

Markdown