Исправление ошибки безопасности libxsl в PHP 5.3.9

Исправление ошибки безопасности libxsl в PHP 5.3.9

только сегодня утром я обновил свой сервер Debian до PHP5.3.9, в журнале изменений (последний пункт в списке) есть исправление для этогоошибкаи теперь при запуске любого размещенного сайта с использованием XSL-преобразований я получаю:

Warning: XSLTProcessor::transformToXml(): Can't set libxslt security properties, not doing transformation for security reasons

Я <sax:output>вообще не использую никаких тегов в своем xslt.

Есть ли у кого-нибудь информация по этому поводу? В настоящее время об этом мало что известно, поэтому я немного запутался.

Используя предложение о включении и выключении настроек ini по обе стороны от ->transformToXml():

ini_set("xsl.security_prefs", XSL_SECPREFS_NONE)

или

$xsl->setSecurityPreferences(XSL_SECPREFS_NONE)

возвращает меня к той же ошибке

Большое спасибо.

Прогресс:
- Обновление libxml и перекомпиляция libxslt для новой версии были хорошим предложением, хотя и не решили проблему.
- Компиляция последней версии php5.3 не решила проблему.

Решение:
Я не уверен, что на самом деле решило эту проблему, очень жаль, если у кого-то еще возникнет такая же проблема. Сначала я обновил libxml, затем применил несколько патчей, затем перешел к исходному коду php для парсера xsl и добавил немного отладки и несколько настроек, после нескольких компиляций с правильными аргументами конфигурации ошибка исчезла и больше не воспроизводилась.
Я бы определенно рекомендовал обновить libxml, как предложил Петр ниже, а затем взять последний снимок с php.net.

решение1

Попробуйте обновить расширение libxml. (В моем случае обновление 2.7.7 -> 2.7.8 могло решить проблему)

решение2

Хотелось бы, чтобы это было лучше задокументировано (см. ошибку php #61233), но из исходного кода видно, что имя метода для PHP 5.4+ — «setSecurityPrefs» вместо «setSecurityPreferences», а константа — «XSL_SECPREF_NONE» вместо «XSL_SECPREFS_NONE» (в отличие от того, что вы можете прочитать в комментарии к ошибке #54446). Хотя я бы предпочел использовать 0 на случай, если они изменят свое мнение о написании.

Сейчас я пытаюсь сделать что-то вроде этого:

    if (version_compare(PHP_VERSION, '5.4', '<')) {
        $oldval = ini_get('xsl.security_prefs');
        if ($oldval != '0') {
            $oldval = ini_set('xsl.security_prefs', '0');
            if ($oldval === false)
                ;//manage the error
        }
    } else
        $oldval = $xsltproc->setSecurityPrefs(0);

и после преобразования:

    if ($oldval != 0 && $oldval != '0') {
        if (version_compare(PHP_VERSION, '5.4', '<'))
            ini_set('xsl.security_prefs', $oldval);
        else
            $xsltproc->setSecurityPrefs($oldval);
    }

Связанный контент