![Corrección del "error" de seguridad libxsl de php 5.3.9](https://rvso.com/image/1303451/Correcci%C3%B3n%20del%20%22error%22%20de%20seguridad%20libxsl%20de%20php%205.3.9.png)
Esta misma mañana actualicé mi servidor Debian a php.5.3.9, el registro de cambios (último elemento de la lista) tiene una solución para estobichoy ahora, cuando ejecuto cualquier sitio alojado usando transformaciones XSL, obtengo:
Warning: XSLTProcessor::transformToXml(): Can't set libxslt security properties, not doing transformation for security reasons
No estoy usando ninguna <sax:output>
etiqueta en mi xslt en absoluto.
¿Alguien tiene alguna información sobre esto? Los rumores actuales al respecto son escasos, así que estoy un poco perdido.
Usando la sugerencia sobre activar y desactivar la configuración ini a ambos lados de ->transformToXml():
ini_set("xsl.security_prefs", XSL_SECPREFS_NONE)
o
$xsl->setSecurityPreferences(XSL_SECPREFS_NONE)
me lleva de nuevo al mismo error
Muchas gracias.
Progreso:
- Actualizar libxml y recompilar libxslt con la nueva versión fue una buena sugerencia, aunque no solucionó el problema.
- La compilación de la última instantánea de php5.3 no soluciona el problema.
Solución:
No estoy seguro de qué resolvió realmente esto, lo siento mucho si alguien más tiene el mismo problema. En primer lugar, actualicé libxml, luego apliqué algunos parches, luego entré en la fuente php para el analizador xsl y agregué algo de depuración y algunos ajustes, después de algunas compilaciones para obtener los argumentos de configuración correctos, el error desapareció y no fue reproducible.
Definitivamente recomendaría actualizar libxml como Petr sugirió a continuación y luego obtener la última instantánea de php.net.
Respuesta1
Intente actualizar su extensión libxml. (2.7.7 -> 2.7.8 podría haber resuelto el problema en mi caso)
Respuesta2
Desearía que esto estuviera mejor documentado (ver error de PHP #61233), pero según el código fuente parece que el nombre del método para PHP 5.4+ es "setSecurityPrefs" en lugar de "setSecurityPreferences" y la constante es "XSL_SECPREF_NONE" en lugar de "XSL_SECPREFS_NONE". (a diferencia de lo que puede leer en un comentario sobre el error n.° 54446). Sin embargo, prefiero usar 0 en caso de que cambien de opinión sobre la ortografía.
Ahora mismo estoy intentando algo como esto:
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);
y después de la transformación:
if ($oldval != 0 && $oldval != '0') {
if (version_compare(PHP_VERSION, '5.4', '<'))
ini_set('xsl.security_prefs', $oldval);
else
$xsltproc->setSecurityPrefs($oldval);
}