![Correção para correção de "bug" de segurança libxsl do php 5.3.9](https://rvso.com/image/1303451/Corre%C3%A7%C3%A3o%20para%20corre%C3%A7%C3%A3o%20de%20%22bug%22%20de%20seguran%C3%A7a%20libxsl%20do%20php%205.3.9.png)
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);
}