<?xml version="1.0" encoding="UTF-8"?>
<!-- Reviewed: no -->
<!-- EN-Revision: 15617 -->
<sect1 id="zend.view.migration">
    <title>以前のバージョンからの移行</title>

    <para>
        この章では、主に Zend_View での過去との互換性のない変更について説明します。
        以前のバージョンからの移行の助けになることでしょう。
    </para>

    <sect2 id="zend.view.migration.zf5748">
        <title>1.7.5 より前のバージョンからの移行</title>

        <para>
            Zend Framework 開発陣は、1.7.5 より前のバージョンにおいて
            <classname>Zend_View::render()</classname> メソッドにローカルファイル読み込み
            (Local File Inclusion: LFI) 脆弱性の問題があることに気づきました。
            1.7.5 より前のバージョンでは、このメソッドはデフォルトで
            親ディレクトリを指す記法 ("../" や "..\")
            を含むビュースクリプトも指定できてしまいます。
            フィルタリングをしていないユーザ入力が <code>render()</code>
            メソッドに渡されると、LFI 攻撃を受ける可能性が出てきます。
        </para>

        <programlisting language="php"><![CDATA[
// $_GET['foobar'] = '../../../../etc/passwd' だったら……
echo $view->render($_GET['foobar']); // LFI
]]></programlisting>

        <para>
            <classname>Zend_View</classname> は、このようなビュースクリプトがリクエストされると
            デフォルトで例外を発生させるようになりました。
        </para>

        <sect3 id="zend.view.migration.zf5748.disabling">
            <title>render() メソッドにおける LFI 保護機能の無効化</title>

            <para>
                多くの開発者から「ユーザの入力では<emphasis>ない</emphasis>
                場面で、意図的にこれらの記法を使っていることもある」という指摘を受けたため、
                特別なフラグを用意してデフォルトの保護機能を無効化できるようにしました。
                無効化する方法は二通りあります。コンストラクタのオプションで
                'lfiProtectionOn' キーを指定するか、あるいは
                <code>setLfiProtection()</code> メソッドをコールします。
            </para>

            <programlisting language="php"><![CDATA[
// コンストラクタでの無効化
$view = new Zend_View(array('lfiProtectionOn' => false));

// メソッドコールによる無効化
$view = new Zend_View();
$view->setLfiProtection(false);
]]></programlisting>
        </sect3>
    </sect2>
</sect1>
<!--
vim:se ts=4 sw=4 et:
-->
