Виправлення для виправлення помилок php 5.3.9 libxsl безпеки


0

тільки сьогодні вранці я оновив свій сервер Debian до php 5.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.

Відповіді:



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);
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.