Correção para php 5.3.9 libxsl security “bug” fix

0

apenas esta manhã eu atualizei meu servidor debian para php 5.3.9 , log de alterações (último item na lista) tem uma correção para este bug e agora ao executar qualquer site hospedado usando transformações XSL eu recebo:

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

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

Alguém tem alguma informação sobre isso, a conversa atual sobre isso é magra, então eu 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 a libxml e recompilar a libxslt contra a nova versão foi uma boa sugestão, embora não tenha corrigido o problema.
 - Compilar o último snapshot do php5.3 não corrige o problema.

Solução:
Não tenho certeza do que realmente resolveu isso, sinto muito por mais alguém ter o mesmo problema. Primeiramente eu atualizei o libxml, então apliquei alguns patches, então entrei no php source para o analisador xsl e adicionei algumas depurações e alguns tweaks, depois de algumas compilações recebendo os argumentos de configuração corretamente o erro desapareceu e não foi reproduzível. > Eu recomendaria definitivamente atualizar o libxml como sugerido por Petr abaixo e depois pegar o último snapshot do php.net.

    
por Question Mark 31.01.2012 / 14:08

2 respostas

0

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

    
por 31.01.2012 / 15:38
2

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

Agora mesmo 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 depois da transformação:

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