php 5.3.9 libxsl セキュリティ「バグ」の修正

php 5.3.9 libxsl セキュリティ「バグ」の修正

今朝、DebianサーバーをPHPにアップデートしました5.3.9変更ログ(リストの最後の項目)にこの問題の修正が記載されていますバグそして、XSL 変換を使用してホストされたサイトを実行すると、次のようになります。

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

<sax:output>私はxslt でタグを一切使用していません。

これについて何か情報を持っている人はいますか。現在これについての噂は薄いので、少し困惑しています。

->transformToXml() の両側で ini 設定のオン/オフを切り替えるという提案を使用します。

ini_set("xsl.security_prefs", XSL_SECPREFS_NONE)

または

$xsl->setSecurityPreferences(XSL_SECPREFS_NONE)

同じエラーに戻る

どうもありがとう。

進捗:
- libxml をアップグレードし、libxslt を新​​しいバージョンに対して再コンパイルすることは良い提案ですが、問題は解決されませんでした
。 - 最新の php5.3 スナップショットをコンパイルしても問題は解決されません。

解決:
実際に何がこの問題を解決したのかはわかりません。同じ問題を抱えている他の方々には本当に申し訳なく思います。まず、libxml をアップグレードし、次にパッチをいくつか適用し、次に xsl パーサーの php ソースにアクセスしてデバッグと微調整をいくつか追加しました。configure 引数を正しく設定して数回コンパイルした後、エラーはなくなり、再現できなくなりました。Petr が
以下で提案しているように、libxml をアップグレードし、php.net から最新のスナップショットを取得することを強くお勧めします。

答え1

libxml 拡張機能を更新してみてください。(私の場合は 2.7.7 -> 2.7.8 で問題が解決した可能性があります)

答え2

これについてはもっと詳しく文書化されていればよかったのですが (php バグ #61233 を参照)、ソース コードを見ると、PHP 5.4+ のメソッド名は「setSecurityPreferences」ではなく「setSecurityPrefs」、定数は「XSL_SECPREFS_NONE」ではなく「XSL_SECPREF_NONE」のようです (バグ #54446 のコメントで読める内容とは異なります)。ただし、スペルに関して考えが変わる場合に備えて、0 を使用することをお勧めします。

今、私は次のようなことを試しています:

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

変換後は次のようになります。

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

関連情報