Fix für PHP 5.3.9 Libxsl-Sicherheits-"Bug"-Fix

Fix für PHP 5.3.9 Libxsl-Sicherheits-"Bug"-Fix

gerade heute morgen habe ich meinen Debian-Server auf PHP aktualisiert5.3.9, Änderungsprotokoll (letzter Eintrag in der Liste) enthält eine Lösung für dieses ProblemInsektund jetzt erhalte ich beim Ausführen einer gehosteten Site mit XSL-Transformationen Folgendes:

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

Ich verwende <sax:output>in meinem XSLT überhaupt keine Tags.

Hat irgendjemand irgendwelche Informationen darüber? Derzeit gibt es nur wenig Gerüchte darüber, daher bin ich etwas ratlos.

Verwenden Sie den Vorschlag, die 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 zum selben Fehler zurück

Vielen Dank.

Fortschritt:
– Das Aktualisieren von libxml und Neukompilieren von libxslt mit der neuen Version war ein guter Vorschlag, hat das Problem jedoch nicht behoben.
– Das Kompilieren des neuesten php5.3-Snapshots behebt das Problem nicht.

Lösung:
Ich bin mir nicht sicher, was das Problem tatsächlich gelöst hat, und es tut mir sehr leid, wenn jemand anderes das gleiche Problem hat. Zuerst habe ich libxml aktualisiert, dann ein paar Patches angewendet, dann bin ich in die PHP-Quelle für den XSL-Parser gegangen und habe einige Debugging- und Optimierungsmaßnahmen hinzugefügt. Nach ein paar Kompilierungen, bei denen die Konfigurationsargumente richtig waren, war der Fehler verschwunden und nicht reproduzierbar.
Ich würde definitiv empfehlen, libxml zu aktualisieren, wie Petr unten vorgeschlagen hat, und dann den neuesten Snapshot von php.net herunterzuladen.

Antwort1

Versuchen Sie, Ihre libxml-Erweiterung zu aktualisieren. (2.7.7 -> 2.7.8 könnte das Problem in meinem Fall gelöst haben)

Antwort2

Ich wünschte, dies wäre besser dokumentiert (siehe PHP-Fehler Nr. 61233), aber aus dem Quellcode sieht es so aus, als ob der Methodenname für PHP 5.4+ „setSecurityPrefs“ statt „setSecurityPreferences“ ist und die Konstante „XSL_SECPREF_NONE“ statt „XSL_SECPREFS_NONE“ (im Gegensatz zu dem, was Sie in einem Kommentar zu Fehler Nr. 54446 lesen können). Trotzdem würde ich lieber 0 verwenden, falls sie ihre Meinung bezüglich der 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);
    }

verwandte Informationen