Исправление для php 5.3.9 libxsl безопасности «ошибка»

539
Question Mark

только сегодня утром я обновил свой сервер 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.

0

2 ответа на вопрос

2
Damien

Я хотел бы, чтобы это было лучше задокументировано (см. Php bug # 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); } 
0
Petr Šlajchrt

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

phpinfo () показывает версию libxslt: 1.1.26, скомпилированную с libxml версии 2.7.8 Question Mark 12 лет назад 0

Похожие вопросы