Correção para correção de "bug" de segurança libxsl do php 5.3.9

Correção para correção de "bug" de segurança libxsl do php 5.3.9

esta manhã atualizei meu servidor debian para php5.3.9, o log de alterações (último item da lista) tem uma correção para issoerroe agora, ao executar qualquer site hospedado usando transformações XSL, recebo:

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

Não estou usando nenhuma <sax:output>tag no meu xslt.

Alguém tem alguma informação sobre isso, a conversa atual sobre isso é escassa, então estou um pouco perdido.

Usando a sugestão sobre como ativar e desativar as configurações ini em ambos os lados de ->transformToXml():

ini_set("xsl.security_prefs", XSL_SECPREFS_NONE)

ou

$xsl->setSecurityPreferences(XSL_SECPREFS_NONE)

me traz de volta ao mesmo erro

Muito obrigado.

Progresso:
- Atualizar o libxml e recompilar o libxslt com a nova versão foi uma boa sugestão, embora não tenha resolvido o problema.
- Compilar o snapshot php5.3 mais recente não resolve o problema.

Solução:
Não tenho certeza do que realmente resolveu isso, sinto muito por mais alguém tendo o mesmo problema. primeiro atualizei o libxml, depois apliquei alguns patches, depois entrei na fonte php para o analisador xsl e adicionei alguma depuração e alguns ajustes, depois de algumas compilações acertando os argumentos de configuração, o erro desapareceu e não foi reproduzível.
Definitivamente, eu recomendaria atualizar o libxml como Petr sugeriu abaixo e, em seguida, obter o instantâneo mais recente do php.net.

Responder1

Tente atualizar sua extensão libxml. (2.7.7 -> 2.7.8 pode ter resolvido o problema no meu caso)

Responder2

Eu gostaria que isso fosse melhor documentado (veja bug do php #61233), mas pelo código fonte parece que o nome do método para PHP 5.4+ é "setSecurityPrefs" em vez de "setSecurityPreferences" e a constante é "XSL_SECPREF_NONE" em vez de "XSL_SECPREFS_NONE" (ao contrário do que você pode ler em um comentário sobre o bug #54446). Porém, eu preferiria usar 0 caso eles mudem de ideia sobre a ortografia.

No momento estou tentando algo assim:

    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);

e após a transformação:

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

informação relacionada