| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!-- EN-Revision: 24249 -->
- <!-- Reviewed: no -->
- <sect1 id="migration.19">
- <title>Zend Framework 1.9</title>
- <para>
- Wenn man von einem Zend Framework Release vor 1.9.0 zu einem beliebigen 1.9 Release
- hochrüstet sollte man die folgenden Migrations Hinweise beachten.
- </para>
- <sect2 id="migration.19.zend.file.transfer">
- <title>Zend_File_Transfer</title>
- <sect3 id="migration.19.zend.file.transfer.mimetype">
- <title>MimeType Prüfung</title>
- <para>
- Aus Sicherheitsgründen haben wir den standardmäßigen Fallback Mechanismus der
- <classname>MimeType</classname>, <classname>ExcludeMimeType</classname>,
- <classname>IsCompressed</classname> und <classname>IsImage</classname> Prüfungen
- ausgeschaltet. Das bedeutet, wenn die <emphasis>fileInfo</emphasis> oder
- <emphasis>magicMime</emphasis> Erweiterungen nicht gefunden werden können, dann
- wird die Prüfung immer fehlschlagen.
- </para>
- <para>
- Wenn es notwendig ist das man für die Prüfung die <acronym>HTTP</acronym> Felder
- verwendet welche vom Benutzer geschickt werden, dann kann man dieses Feature
- einschalten indem die <methodname>enableHeaderCheck()</methodname> Methode
- verwendet wird.
- </para>
- <note>
- <title>Sicherheits Hinweis</title>
- <para>
- Man sollte beachten, das wenn man sich auf die <acronym>HTTP</acronym> Felder
- verlässt, die vom Benutzer geschickt werden, das ein Sicherheits Risiko ist.
- Diese können einfach geändert werden und könnten es einem Benutzer erlauben eine
- schädliche Datei zu schicken.
- </para>
- </note>
- <example id="migration.19.zend.file.transfer.example">
- <title>Die Verwendung der HTTP Felder erlauben</title>
- <programlisting language="php"><![CDATA[
- // Bei der Initiierung
- $valid = new Zend_File_Transfer_Adapter_Http(array('headerCheck' => true);
- // oder im Nachhinein
- $valid->enableHeaderCheck();
- ]]></programlisting>
- </example>
- </sect3>
- </sect2>
- <sect2 id="migration.19.zend.filter">
- <title>Zend_Filter</title>
- <para>
- Vor dem Release 1.9 erlaubte <classname>Zend_Filter</classname> die Verwendung der
- statischen Methode <methodname>get()</methodname>. Ab dem Release 1.9 wurde diese
- Methode zu <methodname>filterStatic()</methodname> umbenannt um besser zu beschreiben
- was Sie macht. Die alte <methodname>get()</methodname> Methode wurde als deprecated
- markiert.
- </para>
- </sect2>
- <sect2 id="migration.19.zend.http.client">
- <title>Zend_Http_Client</title>
- <sect3 id="migration.19.zend.http.client.fileuploadsarray">
- <title>
- Änderungen in der internen Speicherung der Information von hochgeladenen Dateien
- </title>
- <para>
- In Version 1.9 vom Zend Framework gibt es eine Ändernug wie
- <classname>Zend_Http_Client</classname> Informationen über hochgeladenen Dateien
- intern speichert, bei denen die
- <methodname>Zend_Http_Client::setFileUpload()</methodname> Methode verwendet wird.
- </para>
- <para>
- Diese Änderung wurde durchgeführt um es zu erlauben mehrere Dateien mit dem
- gleichen Formularnamen, als Array von Dateien, hochzuladen. Weitere Informationen
- über dieses Problem können in <ulink
- url="http://framework.zend.com/issues/browse/ZF-5744">diesem
- Fehlerreport</ulink> gefunden werden.
- </para>
- <example id="migration.19.zend.http.client.fileuploadsarray.example">
- <title>Interne Speicherung der Informationen von hochgeladenen Dateien</title>
- <programlisting language="php"><![CDATA[
- // Zwei Dateien mit dem gleichen Namen des Formularelements als Array hochladen
- $client = new Zend_Http_Client();
- $client->setFileUpload('file1.txt',
- 'userfile[]',
- 'some raw data',
- 'text/plain');
- $client->setFileUpload('file2.txt',
- 'userfile[]',
- 'some other data',
- 'application/octet-stream');
- // In Zend Framework 1.8 oder älter, ist der Wert der geschützten
- // Variable $client->files:
- // $client->files = array(
- // 'userfile[]' => array('file2.txt',
- 'application/octet-stream',
- 'some other data')
- // );
- // In Zend Framework 1.9 oder neuer, ist der Wert von $client->files:
- // $client->files = array(
- // array(
- // 'formname' => 'userfile[]',
- // 'filename' => 'file1.txt,
- // 'ctype' => 'text/plain',
- // 'data' => 'some raw data'
- // ),
- // array(
- // 'formname' => 'userfile[]',
- // 'filename' => 'file2.txt',
- // 'formname' => 'application/octet-stream',
- // 'formname' => 'some other data'
- // )
- // );
- ]]></programlisting>
- </example>
- <para>
- Wie man sieht gestattet diese Änderung die Verwendung des gleichen Namens für das
- Formularelement mit mehr als einer Datei - trotzdem führt dies zu einer subtilen
- Änderung der Rückwärtskompatibilität und sollte erwähnt werden.
- </para>
- </sect3>
- <sect3 id="migration.19.zend.http.client.getparamsrecursize">
- <title>
- Zend_Http_Client::_getParametersRecursive() sollte nicht mehr eingesetzt werden
- </title>
- <para>
- Beginnend mit Version 1.9, wird die geschützte Methode
- <methodname>_getParametersRecursive()</methodname> nicht mehr von
- <classname>Zend_Http_Client</classname> verwendet und ist abgelehnt (deprecated).
- Ihre Verwendung führt zu einer <constant>E_NOTICE</constant> Nachricht die von
- <acronym>PHP</acronym> kommt.
- </para>
- <para>
- Wenn man <classname>Zend_Http_Client</classname> erweitert und diese Methode
- aufrufr, sollte man sehen das man stattdessen die statische Methode
- <methodname>Zend_Http_Client::_flattenParametersArray()</methodname> verwendet.
- </para>
- <para>
- Nochmals, da <methodname>_getParametersRecursive()</methodname> eine geschützte
- Methode ist, sind nur Benutzer betroffen die <classname>Zend_Http_Client</classname>
- erweitert haben.
- </para>
- </sect3>
- </sect2>
- <sect2 id="migration.19.zend.locale">
- <title>Zend_Locale</title>
- <sect3 id="migration.19.zend.locale.deprecated">
- <title>Abgelaufene Methoden</title>
- <para>
- Einige spezialisiertere Übersetzungsmethoden stehen nicht mehr zur Verfügung weil
- Sie bestehende Verhaltensweisen duplizieren. Beachten Sie das die alten Methoden
- weiterhin funktionieren, aber eine Benutzer Notiz geworfen wird, die den neuen
- Aufruf beschreibt. Diese Methoden werden mit 2.0 entfernt. Die folgende Liste zeigt
- die alten und neuen Methodenaufrufe.
- </para>
- <table id="migration.19.zend.locale.deprecated.table-1">
- <title>List der Methodenaufrufe</title>
- <tgroup cols="2">
- <thead>
- <row>
- <entry>Alter Aufruf</entry>
- <entry>Neuer Aufruf</entry>
- </row>
- </thead>
- <tbody>
- <row>
- <entry>
- <methodname>getLanguageTranslationList($locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslationList('language', $locale)</methodname>
- </entry>
- </row>
- <row>
- <entry>
- <methodname>getScriptTranslationList($locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslationList('script', $locale)</methodname>
- </entry>
- </row>
- <row>
- <entry>
- <methodname>getCountryTranslationList($locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslationList('territory', $locale, 2)</methodname>
- </entry>
- </row>
- <row>
- <entry>
- <methodname>getTerritoryTranslationList($locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslationList('territory', $locale, 1)</methodname>
- </entry>
- </row>
- <row>
- <entry>
- <methodname>getLanguageTranslation($value, $locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslation($value, 'language', $locale)</methodname>
- </entry>
- </row>
- <row>
- <entry>
- <methodname>getScriptTranslation($value, $locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslation($value, 'script', $locale)</methodname>
- </entry>
- </row>
- <row>
- <entry>
- <methodname>getCountryTranslation($value, $locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslation($value, 'country', $locale)</methodname>
- </entry>
- </row>
- <row>
- <entry>
- <methodname>getTerritoryTranslation($value, $locale)</methodname>
- </entry>
- <entry>
- <methodname>getTranslation($value, 'territory',
- $locale)</methodname>
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
- </sect3>
- </sect2>
- <sect2 id="migration.19.zend.view.helper.navigation">
- <title>Zend_View_Helper_Navigation</title>
- <para>
- Vor dem Release 1.9 hat der Menü Helfer
- (<classname>Zend_View_Helper_Navigation_Menu</classname>) Untermenüs nicht richtig
- dargestellt. Wenn <property>onlyActiveBranch</property> <constant>TRUE</constant> war
- und die Option <property>renderParents</property> <constant>FALSE</constant> wurde
- nichts dargestellt wenn die tiefste aktive Seite auf einer geringeren Tiele als die
- <property>minDepth</property> Option war.
- </para>
- <para>
- In einfacheren Worten; Wenn <property>minDepth</property> auf '1' gesetzt war und
- die aktive Seite eine der Seiten am Anfangs-Level, wurde nichts dargestellt wie das
- folgende Beispiel zeigt.
- </para>
- <para>
- Das folgende Container Setup wird angenommen:
- </para>
- <programlisting language="php"><![CDATA[
- <?php
- $container = new Zend_Navigation(array(
- array(
- 'label' => 'Home',
- 'uri' => '#'
- ),
- array(
- 'label' => 'Products',
- 'uri' => '#',
- 'active' => true,
- 'pages' => array(
- array(
- 'label' => 'Server',
- 'uri' => '#'
- ),
- array(
- 'label' => 'Studio',
- 'uri' => '#'
- )
- )
- ),
- array(
- 'label' => 'Solutions',
- 'uri' => '#'
- )
- ));
- ]]></programlisting>
- <para>
- Der folgende Code wird in einem View Script verwendet:
- </para>
- <programlisting language="php"><![CDATA[
- <?php echo $this->navigation()->menu()->renderMenu($container, array(
- 'minDepth' => 1,
- 'onlyActiveBranch' => true,
- 'renderParents' => false
- )); ?>
- ]]></programlisting>
- <para>
- Vor dem Release 1.9 würde der obige Codeabschnitt nichts ausgeben.
- </para>
- <para>
- Seit dem Release 1.9 akzeptiert die <methodname>_renderDeepestMenu()</methodname>
- Methode in <classname>Zend_View_Helper_Navigation_Menu</classname> aktive Seiten die ein
- Level unter <property>minDepth</property> sind, solange diese Seite Kinder hat.
- </para>
- <para>
- Der gleiche Codeabschnitt zeigt jetzt die folgende Ausgabe:
- </para>
- <programlisting language="html"><![CDATA[
- <ul class="navigation">
- <li>
- <a href="#">Server</a>
- </li>
- <li>
- <a href="#">Studio</a>
- </li>
- </ul>
- ]]></programlisting>
- </sect2>
- <sect2 id="migration.19.security">
- <title>Sicherheitsfixes ab 1.9.7</title>
- <para>
- Zusätzlich können Benutzer der Serie 1.9 von anderen Änderungen beginnend in Version
- 1.9.7 betroffen sein. Das sind alles Sicherheitsbehebungen welche auch potentiell
- Probleme mit Rückwärtskompatibilität haben können.
- </para>
- <sect3 id="migration.19.security.zend.dojo.editor">
- <title>Zend_Dojo_View_Helper_Editor</title>
- <para>
- Eine kleine Änderung wurde in der Serie 1.9 gemacht um die Standardverwendung des
- dijit Editors zu modifizieren um <acronym>div</acronym> Tags statt einem
- <acronym>textarea</acronym> Tag zu verwenden; die letztere Verwendung bringt <ulink
- url="http://api.dojotoolkit.org/jsdoc/HEAD/dijit._editor.RichText">Sicherheits
- Probleme</ulink> mit sich, und die Verwendung von <acronym>div</acronym> Tags
- wird vom Dojo Projekt empfohlen.
- </para>
- <para>
- Um trotzdem eine erfolgreiche Degration zu erlauben, wurde dem View Helper eine neue
- Option <varname>degrade</varname> hinzugefügt; diese erlaubt es Entwicklern statt
- dessen optional ein <acronym>textarea</acronym> zu verwenden. Trotzdem öffnet dies
- Anwendungen die damit entwickelt wurden <acronym>XSS</acronym> Vektoren. In 1.9.7
- wurde diese Option entfernt. Die erfolgreiche Degration wird trotzdem, über das
- <acronym>noscript</acronym> Tag unterstützt welches eine <acronym>textarea</acronym>
- enthält. Diese Lösung adressiert Sicherheitsbedenken.
- </para>
- <para>
- Die Folgerung ist, das wenn man das <varname>degrade</varname> Flag verwendet,
- dieses ab diesem Zeitpunkt einfach ignoriert wird.
- </para>
- </sect3>
- <sect3 id="migration.19.security.zend.filter.html-entities">
- <title>Zend_Filter_HtmlEntities</title>
- <para>
- Um zu einem höheren Sicherheitsstandard für die Zeichenkodierung zu kommen, ist der
- Standardwert von <classname>Zend_Filter_HtmlEntities</classname> jetzt
- <acronym>UTF-8</acronym> statt <acronym>ISO-8859-1</acronym>.
- </para>
- <para>
- Zusätzlich, weil der aktuelle Mechanismus mit Zeichenkodierung handelt und nicht mit
- Zeichensets, wurden zwei Methoden hinzugefügt.
- <methodname>setEncoding()</methodname> und <methodname>getEncoding()</methodname>.
- Die vorhergehenden Methoden <methodname>setCharSet()</methodname> und
- <methodname>setCharSet()</methodname> sind jetzt deprecated und verweisen auf die
- neuen Methoden. Letztendlich, statt die geschützten Mitglieder in der
- <methodname>filter()</methodname> Methode direkt zu verwenden, werden Sie durch Ihre
- expliziten Zugriffsmethoden empfangen. Wenn man den Filter in der Vergangenheit
- erweitert hat, sollte man seinen Code und seine Unittests prüfen um sicherzustellen
- das weiterhin alles funktioniert.
- </para>
- </sect3>
- <sect3 id="migration.19.security.zend.filter.strip-tags">
- <title>Zend_Filter_StripTags</title>
- <para>
- <classname>Zend_Filter_StripTags</classname> enthielt in voehergehenden Versionen
- ein <varname>commentsAllowed</varname> Flag, welches es erlaubt hat
- <acronym>HTML</acronym> Kommentare in von dieser Klasse gefiltertem
- <acronym>HTML</acronym> Text als erlaubt zu markieren. Aber das öffnet den Weg für
- <acronym>XSS</acronym> Attacken, speziell im Internet Explorer (der es erlaubt
- konditionelle Funktionalität über <acronym>HTML</acronym> Kommentare zu
- spezifizieren). Beginnend mit Version 1.9.7 (und retour mit den Versionen 1.8.5 und
- 1.7.9), hat das <varname>commentsAllowed</varname> Flag keine Bedeutung meht, und
- alle <acronym>HTML</acronym> Kommentare, inklusive denen die andere
- <acronym>HTML</acronym> Tags oder untergeordnete Kommentare enthalten, werden von
- der endgültigen Aufgabe des Filters entfernt.
- </para>
- </sect3>
- </sect2>
- </sect1>
|