Korrektur für Fehlerbehebung bei der libxsl-Sicherheit in PHP 5.3.9

566
Question Mark

Heute morgen habe ich meinen Debian-Server auf PHP 5.3.9 aktualisiert. Das Änderungsprotokoll (letzter Eintrag in der Liste) enthält eine Korrektur für diesen Fehler. Wenn ich nun eine gehostete Site mit XSL-Transformationen betreibe, bekomme ich:

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

Ich verwende keine <sax:output>Tags in meinem xslt.

Hat jemand irgendwelche Informationen darüber, ist das aktuelle Geschwätz dazu dünn, also bin ich wenig verloren.

Verwenden Sie den Vorschlag, ini-Einstellungen auf beiden Seiten von -> transformToXml () ein- und auszuschalten:

ini_set("xsl.security_prefs", XSL_SECPREFS_NONE) 

oder

$xsl->setSecurityPreferences(XSL_SECPREFS_NONE) 

bringt mich auf den gleichen Fehler zurück

Danke vielmals.

Fortschritt:
- Das Upgrade von libxml und die Neukompilierung von libxslt gegen die neue Version war ein guter Vorschlag, obwohl das Problem nicht behoben wurde.
- Das Kompilieren des neuesten Snapshots für PHP5.3 behebt das Problem nicht.

Lösung:
Ich bin mir nicht sicher, was dieses Problem tatsächlich gelöst hat, es tut mir sehr leid, wenn alle anderen dasselbe Problem haben. Zuerst habe ich libxml aufgerüstet, dann ein paar Patches angewendet, dann in den PHP-Quellcode für den Xsl-Parser gegangen und ein paar Debugging und ein paar Verbesserungen hinzugefügt.
Ich würde definitiv empfehlen, libxml zu aktualisieren, da Petr unten vorschlug, und dann den neuesten Schnappschuss von php.net zu holen.

0

2 Antworten auf die Frage

2
Damien

Ich wünschte, das wäre besser dokumentiert (siehe PHP-Bug # 61233), aber aus dem Quellcode sieht es aus, als wäre der Methodenname für PHP 5.4+ "setSecurityPrefs" anstelle von "setSecurityPreferences" und die Konstante ist "XSL_SECPREF_NONE" anstelle von "XSL_SECPREFS_NONE". (Im Gegensatz zu dem, was Sie in einem Kommentar zu Fehler # 54446 lesen können). Ich würde jedoch eher 0 verwenden, falls sie ihre Meinung über die Schreibweise ändern.

Im Moment versuche ich so etwas:

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

und nach der Transformation:

 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

Aktualisieren Sie Ihre libxml-Erweiterung. (2.7.7 -> 2.7.8 hat das Problem möglicherweise in meinem Fall gelöst)

phpinfo () zeigt die libxslt-Version: 1.1.26, die mit der libxml-Version 2.7.8 kompiliert wurde Question Mark vor 12 Jahren 0