migration-17.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 20115 -->
  3. <!-- Reviewed: no -->
  4. <sect1 id="migration.17">
  5. <title>Zend Framework 1.7</title>
  6. <para>
  7. Wenn man von einem älteren Release auf Zend Framework 1.7 oder höher hochrüstet sollte
  8. man die folgenden Migrations Hinweise beachten.
  9. </para>
  10. <sect2 id="migration.17.zend.controller">
  11. <title>Zend_Controller</title>
  12. <sect3 id="migration.17.zend.controller.dispatcher">
  13. <title>Änderungen im Dispatcher Interface</title>
  14. <para>
  15. Benutzer haben uns darauf aufmerksam gemacht das
  16. <classname>Zend_Controller_Action_Helper_ViewRenderer</classname> Methoden auf der
  17. abstrakten Dispatcher Klasse verwendet hat die nicht im Dispatcher Interface waren.
  18. Die folgenden Methoden wurden hinzugefügt um sicherzustellen das eigene Dispatcher
  19. weiterhin mit den ausgelieferten Implementierungen funktionieren:
  20. </para>
  21. <itemizedlist>
  22. <listitem>
  23. <para>
  24. <methodname>formatModuleName()</methodname>: sollte verwendet werden um
  25. einen rohen Controllernamen zu nehmen, wie den einen der in einem
  26. Anfrageobjekt gepackt ist, und Ihn in einen richtigen Klassennamen zu
  27. reformatieren den eine Klasse, die
  28. <classname>Zend_Controller_Action</classname> erweitert, verwenden würde
  29. </para>
  30. </listitem>
  31. </itemizedlist>
  32. </sect3>
  33. </sect2>
  34. <sect2 id="migration.17.zend.file.transfer">
  35. <title>Zend_File_Transfer</title>
  36. <sect3 id="migration.17.zend.file.transfer.validators">
  37. <title>Änderungen bei der Verwendung von Filtern und Prüfungen</title>
  38. <para>
  39. Wie von Benutzern erwähnt, arbeiteten die Prüfungen von
  40. <classname>Zend_File_Transfer</classname> nicht in Verbindung mit
  41. <classname>Zend_Config</classname> zusammen, durch den Fakt das Sie keine benannten
  42. Arrays verwendet haben.
  43. </para>
  44. <para>
  45. Deswegen wurden alle Filter und Prüfungen für
  46. <classname>Zend_File_Transfer</classname> überarbeitet. Wärend die alten Signaturen
  47. weiterhin funktionieren, wurden sie als veraltet markiert, und werfen eine
  48. <acronym>PHP</acronym> Notiz mit der Aufforderung das zu beheben.
  49. </para>
  50. <para>
  51. Die folgende Liste zeigt die Änderungen und was für die richtige Verwendung der
  52. Parameter getan werden muß.
  53. </para>
  54. <sect4 id="migration.17.zend.file.transfer.validators.rename">
  55. <title>Filter: Rename</title>
  56. <itemizedlist>
  57. <listitem><para>
  58. Alte <acronym>API</acronym> der Methode:
  59. <methodname>Zend_Filter_File_Rename($oldfile, $newfile,
  60. $overwrite)</methodname>
  61. </para></listitem>
  62. <listitem><para>
  63. Neue <acronym>API</acronym> der Methode:
  64. <methodname>Zend_Filter_File_Rename($options)</methodname> wobei
  65. <varname>$options</varname> die folgenden Schlüssel für das Array
  66. akzeptiert: <emphasis>source</emphasis> identisch mit
  67. <varname>$oldfile</varname>, <emphasis>target</emphasis> identisch mit
  68. <varname>$newfile</varname>, <emphasis>overwrite</emphasis> identisch mit
  69. <varname>$overwrite</varname>
  70. </para></listitem>
  71. </itemizedlist>
  72. <example id="migration.17.zend.file.transfer.validators.rename.example">
  73. <title>Änderungen für den Rename Filter von 1.6 zu 1.7</title>
  74. <programlisting language="php"><![CDATA[
  75. // Beispiel für 1.6
  76. $upload = new Zend_File_Transfer_Adapter_Http();
  77. $upload->addFilter('Rename',
  78. array('/path/to/oldfile', '/path/to/newfile', true));
  79. // Gleiches Beispiel für 1.7
  80. $upload = new Zend_File_Transfer_Adapter_Http();
  81. $upload->addFilter('Rename',
  82. array('source' => '/path/to/oldfile',
  83. 'target' => '/path/to/newfile',
  84. 'overwrite' => true));
  85. ]]></programlisting>
  86. </example>
  87. </sect4>
  88. <sect4 id="migration.17.zend.file.transfer.validators.count">
  89. <title>Prüfung: Count</title>
  90. <itemizedlist>
  91. <listitem><para>
  92. Alte <acronym>API</acronym> der Methode:
  93. <methodname>Zend_Validate_File_Count($min, $max)</methodname>
  94. </para></listitem>
  95. <listitem><para>
  96. Neue <acronym>API</acronym> der Methode:
  97. <methodname>Zend_Validate_File_Count($options)</methodname> wobei
  98. <varname>$options</varname> die folgenden Schlüssel für das Array
  99. akzeptiert: <emphasis>min</emphasis> identisch mit <varname>$min</varname>,
  100. <emphasis>max</emphasis> identisch mit <varname>$max</varname>
  101. </para></listitem>
  102. </itemizedlist>
  103. <example id="migration.17.zend.file.transfer.validators.count.example">
  104. <title>Änderungen für die Count Prüfung von 1.6 zu 1.7</title>
  105. <programlisting language="php"><![CDATA[
  106. // Beispiel für 1.6
  107. $upload = new Zend_File_Transfer_Adapter_Http();
  108. $upload->addValidator('Count',
  109. array(2, 3));
  110. // Gleiches Beispiel für 1.7
  111. $upload = new Zend_File_Transfer_Adapter_Http();
  112. $upload->addValidator('Count',
  113. false,
  114. array('min' => 2,
  115. 'max' => 3));
  116. ]]></programlisting>
  117. </example>
  118. </sect4>
  119. <sect4 id="migration.17.zend.file.transfer.validators.extension">
  120. <title>Prüfung: Extension</title>
  121. <itemizedlist>
  122. <listitem><para>
  123. Alte <acronym>API</acronym> der Methode:
  124. <methodname>Zend_Validate_File_Extension($extension, $case)</methodname>
  125. </para></listitem>
  126. <listitem><para>
  127. Neue <acronym>API</acronym> der Methode:
  128. <methodname>Zend_Validate_File_Extension($options)</methodname> wobei
  129. <varname>$options</varname> die folgenden Schlüssel für das Array
  130. akzeptiert: <emphasis>*</emphasis> identisch mit
  131. <varname>$extension</varname> und kann jeden anderen Schlüssel haben
  132. <emphasis>case</emphasis> identisch mit <varname>$case</varname>
  133. </para></listitem>
  134. </itemizedlist>
  135. <example id="migration.17.zend.file.transfer.validators.extension.example">
  136. <title>Änderungen für die Extension Prüfung von 1.6 zu 1.7</title>
  137. <programlisting language="php"><![CDATA[
  138. // Beispiel für 1.6
  139. $upload = new Zend_File_Transfer_Adapter_Http();
  140. $upload->addValidator('Extension',
  141. array('jpg,gif,bmp', true));
  142. // Gleiches Beispiel für 1.7
  143. $upload = new Zend_File_Transfer_Adapter_Http();
  144. $upload->addValidator('Extension',
  145. false,
  146. array('extension1' => 'jpg,gif,bmp',
  147. 'case' => true));
  148. ]]></programlisting>
  149. </example>
  150. </sect4>
  151. <sect4 id="migration.17.zend.file.transfer.validators.filessize">
  152. <title>Prüfung: FilesSize</title>
  153. <itemizedlist>
  154. <listitem><para>
  155. Alte <acronym>API</acronym> der Methode:
  156. <methodname>Zend_Validate_File_FilesSize($min, $max,
  157. $bytestring)</methodname>
  158. </para></listitem>
  159. <listitem><para>
  160. Neue <acronym>API</acronym> der Methode:
  161. <methodname>Zend_Validate_File_FilesSize($options)</methodname> wobei
  162. <varname>$options</varname> die folgenden Schlüssel für das Array
  163. akzeptiert: <emphasis>min</emphasis> identisch mit <varname>$min</varname>,
  164. <emphasis>max</emphasis> identisch mit <varname>$max</varname>,
  165. <emphasis>bytestring</emphasis> identisch mit <varname>$bytestring</varname>
  166. </para></listitem>
  167. </itemizedlist>
  168. <para>
  169. Zustätzlich wurde die Signatur der <methodname>useByteString()</methodname>
  170. Methode geändert. Sie kann nur verwendet werden um zu testen ob die Prüfung
  171. ByteStrings in den erzeugten Meldungen verwendet oder ncht. Um den Wert dieses
  172. Flags zu setzen muß die <methodname>setUseByteString()</methodname> Methode
  173. verwendet werden.
  174. </para>
  175. <example id="migration.17.zend.file.transfer.validators.filessize.example">
  176. <title>Änderungen für die FilesSize Prüfung von 1.6 zu 1.7</title>
  177. <programlisting language="php"><![CDATA[
  178. // Beispiel für 1.6
  179. $upload = new Zend_File_Transfer_Adapter_Http();
  180. $upload->addValidator('FilesSize',
  181. array(100, 10000, true));
  182. // Gleiches Beispiel für 1.7
  183. $upload = new Zend_File_Transfer_Adapter_Http();
  184. $upload->addValidator('FilesSize',
  185. false,
  186. array('min' => 100,
  187. 'max' => 10000,
  188. 'bytestring' => true));
  189. // Beispiel für 1.6
  190. $upload->useByteString(true); // Flag setzen
  191. // Gleiches Beispiel für 1.7
  192. $upload->setUseByteSting(true); // Flag setzen
  193. ]]></programlisting>
  194. </example>
  195. </sect4>
  196. <sect4 id="migration.17.zend.file.transfer.validators.hash">
  197. <title>Prüfung: Hash</title>
  198. <itemizedlist>
  199. <listitem><para>
  200. Alte <acronym>API</acronym> der Methode:
  201. <methodname>Zend_Validate_File_Hash($hash, $algorithm)</methodname>
  202. </para></listitem>
  203. <listitem><para>
  204. Neue <acronym>API</acronym> der Methode:
  205. <methodname>Zend_Validate_File_Hash($options)</methodname> wobei
  206. <varname>$options</varname> die folgenden Schlüssel für das Array
  207. akzeptiert: <emphasis>*</emphasis> identisch mit <varname>$hash</varname>
  208. und kann jeden anderen Schlüssel haben <emphasis>algorithm</emphasis>
  209. identisch mit <varname>$algorithm</varname>
  210. </para></listitem>
  211. </itemizedlist>
  212. <example id="migration.17.zend.file.transfer.validators.hash.example">
  213. <title>Änderungen für die Hash Prüfung von 1.6 zu 1.7</title>
  214. <programlisting language="php"><![CDATA[
  215. // Beispiel für 1.6
  216. $upload = new Zend_File_Transfer_Adapter_Http();
  217. $upload->addValidator('Hash',
  218. array('12345', 'md5'));
  219. // Gleiches Beispiel für 1.7
  220. $upload = new Zend_File_Transfer_Adapter_Http();
  221. $upload->addValidator('Hash',
  222. false,
  223. array('hash1' => '12345',
  224. 'algorithm' => 'md5'));
  225. ]]></programlisting>
  226. </example>
  227. </sect4>
  228. <sect4 id="migration.17.zend.file.transfer.validators.imagesize">
  229. <title>Prüfung: ImageSize</title>
  230. <itemizedlist>
  231. <listitem><para>
  232. Alte <acronym>API</acronym> der Methode:
  233. <methodname>Zend_Validate_File_ImageSize($minwidth, $minheight, $maxwidth,
  234. $maxheight)</methodname>
  235. </para></listitem>
  236. <listitem><para>
  237. Neue <acronym>API</acronym> der Methode:
  238. <methodname>Zend_Validate_File_FilesSize($options)</methodname> wobei
  239. <varname>$options</varname> die folgenden Schlüssel für das Array
  240. akzeptiert: <emphasis>minwidth</emphasis> identisch mit
  241. <varname>$minwidth</varname>, <emphasis>maxwidth</emphasis> identisch mit
  242. <varname>$maxwidth</varname>, <emphasis>minheight</emphasis> identisch mit
  243. <varname>$minheight</varname>, <emphasis>maxheight</emphasis> identisch mit
  244. <varname>$maxheight</varname>
  245. </para></listitem>
  246. </itemizedlist>
  247. <example id="migration.17.zend.file.transfer.validators.imagesize.example">
  248. <title>Änderungen für die ImageSize Prüfung von 1.6 zu 1.7</title>
  249. <programlisting language="php"><![CDATA[
  250. // Beispiel für 1.6
  251. $upload = new Zend_File_Transfer_Adapter_Http();
  252. $upload->addValidator('ImageSize',
  253. array(10, 10, 100, 100));
  254. // Gleiches Beispiel für 1.7
  255. $upload = new Zend_File_Transfer_Adapter_Http();
  256. $upload->addValidator('ImageSize',
  257. false,
  258. array('minwidth' => 10,
  259. 'minheight' => 10,
  260. 'maxwidth' => 100,
  261. 'maxheight' => 100));
  262. ]]></programlisting>
  263. </example>
  264. </sect4>
  265. <sect4 id="migration.17.zend.file.transfer.validators.size">
  266. <title>Prüfung: Size</title>
  267. <itemizedlist>
  268. <listitem><para>
  269. Alte <acronym>API</acronym> der Methode:
  270. <methodname>Zend_Validate_File_Size($min, $max, $bytestring)</methodname>
  271. </para></listitem>
  272. <listitem><para>
  273. Neue <acronym>API</acronym> der Methode:
  274. <methodname>Zend_Validate_File_Size($options)</methodname> wobei
  275. <varname>$options</varname> die folgenden Schlüssel für das Array
  276. akzeptiert: <emphasis>min</emphasis> identisch mit <varname>$min</varname>,
  277. <emphasis>max</emphasis> identisch mit <varname>$max</varname>,
  278. <emphasis>bytestring</emphasis> identisch mit <varname>$bytestring</varname>
  279. </para></listitem>
  280. </itemizedlist>
  281. <example id="migration.17.zend.file.transfer.validators.size.example">
  282. <title>Änderungen für die Size Prüfung von 1.6 zu 1.7</title>
  283. <programlisting language="php"><![CDATA[
  284. // Beispiel für 1.6
  285. $upload = new Zend_File_Transfer_Adapter_Http();
  286. $upload->addValidator('Size',
  287. array(100, 10000, true));
  288. // Gleiches Beispiel für 1.7
  289. $upload = new Zend_File_Transfer_Adapter_Http();
  290. $upload->addValidator('Size',
  291. false,
  292. array('min' => 100,
  293. 'max' => 10000,
  294. 'bytestring' => true));
  295. ]]></programlisting>
  296. </example>
  297. </sect4>
  298. </sect3>
  299. </sect2>
  300. <sect2 id="migration.17.zend.locale">
  301. <title>Zend_Locale</title>
  302. <sect3 id="migration.17.zend.locale.islocale">
  303. <title>Änderungen bei der Verwendung von isLocale()</title>
  304. <para>
  305. Bezugnehmend auf den Codingstandard mußte <methodname>isLocale()</methodname> so
  306. geändert werden das es ein Boolean zurückgibt. In vorhergehenden Releases wurde im
  307. Erfolgsfall ein String zurückgegeben. Für das Release 1.7 wurde ein
  308. Kompatibilitätsmodus hinzugefügt der es erlaubt das alte Verhalten, das ein String
  309. zurückgegeben wird, zu verwenden, aber das triggert auch eine User Warning die
  310. darauf hinweist das man auf das neue Verhalten wechseln sollte. Das Rerouting
  311. welches das alte Verhalten von <methodname>isLocale()</methodname> durchgeführt
  312. hätte ist nicht länger notwendig, da alle I18n Komponenten jetzt das Rerouting
  313. selbst durchführen.
  314. </para>
  315. <para>
  316. Um die Skripte auf die neue <acronym>API</acronym> zu migrieren muß die Methode
  317. einfach wie anbei gezeigt verwendet werden.
  318. </para>
  319. <example id="migration.17.zend.locale.islocale.example">
  320. <title>Wie man isLocale() von 1.6 nach 1.7 ändern muß</title>
  321. <programlisting language="php"><![CDATA[
  322. // Beispiel für 1.6
  323. if ($locale = Zend_Locale::isLocale($locale)) {
  324. // mach was
  325. }
  326. // Selbes Beispiel für 1.7
  327. // Man sollte den Kompatibilitätsmodus ändern um User Warnings zu verhindern
  328. // Aber man kann das in der Bootstrap tun
  329. Zend_Locale::$compatibilityMode = false;
  330. if (Zend_Locale::isLocale($locale)) {
  331. }
  332. ]]></programlisting>
  333. <para>
  334. Es ist zu beachten das man den zweiten Parameter verwendet kann um zu sehen ob
  335. das Gebietsschema richtig ist ohne das ein Rerouting durchgeführt wird.
  336. </para>
  337. <programlisting language="php"><![CDATA[
  338. // Beispiel für 1.6
  339. if ($locale = Zend_Locale::isLocale($locale, false)) {
  340. // mach was
  341. }
  342. // Selbes Beispiel für 1.7
  343. // Man sollte den Kompatibilitätsmodus ändern um User Warnings zu verhindern
  344. // Aber man kann das in der Bootstrap tun
  345. Zend_Locale::$compatibilityMode = false;
  346. if (Zend_Locale::isLocale($locale, false)) {
  347. if (Zend_Locale::isLocale($locale, true)) {
  348. // gar kein Gebietsschema
  349. }
  350. // Original String ist kein Gebietsschema, kann aber Reroutet werden
  351. }
  352. ]]></programlisting>
  353. </example>
  354. </sect3>
  355. <sect3 id="migration.17.zend.locale.getdefault">
  356. <title>Änderungen bei der Verwendung von getDefault()</title>
  357. <para>
  358. Die Bedeutung der <methodname>getDefault()</methodname> Methode wurde verändert
  359. durch den Fakt das Framework-weite Gebietsschemata integriert wurden welche mit
  360. <methodname>setDefault()</methodname> gesetzt werden können. Deswegen gibe es nicht
  361. mehr die Kette der Gebietsschemata zurück sondern nur die gesetzten Framework-weiten
  362. Gebietsschemata.
  363. </para>
  364. <para>
  365. Um die eigenen Skripte auf die neue <acronym>API</acronym> zu migrieren, muß einfach
  366. die Methode wie unten gezeigt verwendet werden.
  367. </para>
  368. <example id="migration.17.zend.locale.getdefault.example">
  369. <title>Wie man getDefault() von 1.6 auf 1.7 ändert</title>
  370. <programlisting language="php"><![CDATA[
  371. // Beispiel für 1.6
  372. $locales = $locale->getDefault(Zend_Locale::BROWSER);
  373. // Selbes Beispiel für 1.7
  374. // Man sollte den Compatibility Mode setzen um User Notices zu verhindern
  375. // Das kann in der Bootstrap Datei getan werden
  376. Zend_Locale::$compatibilityMode = false;
  377. $locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);
  378. ]]></programlisting>
  379. <para>
  380. Es ist zu beachten das der zweite Parameter der alten
  381. <methodname>getDefault()</methodname> Implementation nicht mehr vorhanden ist,
  382. aber die zurückgegebenen Werte die gleichen sind.
  383. </para>
  384. </example>
  385. <note>
  386. <para>
  387. Standardmäßig ist das alte Verhalten noch immer aktiv, wirft aber eine User
  388. Notice. Wenn man den eigenen Code zum neuen Verhalten geändert hat sollte man
  389. auch den Compatibility Mode auf <constant>FALSE</constant> setzen damit keine
  390. Notices mehr geworfen werden.
  391. </para>
  392. </note>
  393. </sect3>
  394. </sect2>
  395. <sect2 id="migration.17.zend.translate">
  396. <title>Zend_Translate</title>
  397. <sect3 id="migration.17.zend.translate.languages">
  398. <title>Setzen von Sprachen</title>
  399. <para>
  400. Wenn man die automatische Erkennung von Sprachen verwendet, oder Sprachen manuell
  401. auf <classname>Zend_Translate</classname> setzt kann es sein das man von Zeit zu
  402. Zeit eine Notiz geworfen bekommen die über nicht hinzugefügte oder leere
  403. Übersetzungen schreibt. In einigen vorhergehenden Releases wurde in einigen Fällen
  404. auch eine Exception geworfen.
  405. </para>
  406. <para>
  407. Der Grund ist, das wenn ein Benutzer eine nicht existierende Sprache anfragt, man
  408. einfach keinen Weg hat um festzustellen was falsch ist. Deswegen haben wir diese
  409. Notizen hinzugefügt die einem in den eigenen Logs zeigen das der Benutzer eine
  410. Sprache angefragt hat die man nicht unterstützt. Es ist zu beachten das der Code,
  411. selbst wenn eine Notiz getriggert wird, weiterhin ohne Probleme arbeitet.
  412. </para>
  413. <para>
  414. Aber wenn man einen eigenen Fehler oder Exception Handler, wie XDebug, verwendet
  415. wird man alle Notizen zurückerhalten, selbst wenn man das nicht gewollt hat. Das ist
  416. der Fall, weil diese Handler alle Einstellungen von <acronym>PHP</acronym> selbst
  417. überschreiben.
  418. </para>
  419. <para>
  420. Um diese Notizen wegzubekommen kann man einfach die neue Option 'disableNotices' auf
  421. <constant>TRUE</constant> setzen. Der Standardwert ist <constant>FALSE</constant>.
  422. </para>
  423. <example id="migration.17.zend.translate.example">
  424. <title>Setzen von Sprachen ohne das man Notizen erhält</title>
  425. <para>
  426. Nehmen wir an das wir 'en' vorhanden haben und unser Benutzer 'fr' anfragt was
  427. nicht in unserem Portfolio der übersetzten Sprachen ist.
  428. </para>
  429. <programlisting language="php"><![CDATA[
  430. $language = new Zend_Translate('gettext',
  431. '/path/to/translations',
  432. 'auto');
  433. ]]></programlisting>
  434. <para>
  435. In diesem Fall werden wir eine Notiz darüber erhalten das die Sprache 'fr' nicht
  436. vorhanden ist. Durch das einfache Hinzufügen der Option wird die Notiz
  437. abgeschaltet.
  438. </para>
  439. <programlisting language="php"><![CDATA[
  440. $language = new Zend_Translate('gettext',
  441. '/path/to/translations',
  442. 'auto',
  443. array('disableNotices' => true));
  444. ]]></programlisting>
  445. </example>
  446. </sect3>
  447. </sect2>
  448. <sect2 id="migration.17.zend.view">
  449. <title>Zend_View</title>
  450. <note>
  451. <para>
  452. Die Änderung der API in <classname>Zend_View</classname> sind nur dann zu beachten
  453. wenn man zum Release 1.7.5 oder höher hochrüstet.
  454. </para>
  455. </note>
  456. <para>
  457. Vor dem 1.7.5 Release wurde das Zend Framework Team darauf aufmerksam gemacht das eine
  458. potentielle Local File Inclusion (LFI) Schwäche in der
  459. <methodname>Zend_View::render()</methodname> Methode existiert. Vor 1.7.5, erlaubte die
  460. Methode standardmäßig, die Fähigkeit View Skripte zu spezifizieren die Schreibweisen für
  461. Eltern-Verzeichnisse enthalten (z.B. "../" oder "..\"). Das öffnet die Möglichkeit für
  462. eine LFI Attacke wenn ungefilterte Benutzereingaben an die
  463. <methodname>render()</methodname> Methode übergeben werden:
  464. </para>
  465. <programlisting language="php"><![CDATA[
  466. // Wobei $_GET['foobar'] = '../../../../etc/passwd'
  467. echo $view->render($_GET['foobar']); // LFI Einbruch
  468. ]]></programlisting>
  469. <para>
  470. <classname>Zend_View</classname> wirft jetzt standardmäßig eine Ausnahme wenn so ein
  471. View Skript angefragt wird.
  472. </para>
  473. <sect3 id="zend.view.migration.zf5748.disabling">
  474. <title>Ausschalten des LFI Schutzes für die render() Methode</title>
  475. <para>
  476. Da viele Entwickler gemeldet haben das Sie so eine Schreibweise in Ihren
  477. Anwendungen verwenden die <emphasis>nicht</emphasis> das Ergebnis einer
  478. Benutzereingabe sind, wurde ein spezielles Flag erstellt um das Deaktivieren des
  479. standardmäßigen Schutzes zu erlauben. Es gibt 2 Methoden um das Durchzuführen:
  480. Indem der 'lfiProtectionOn' Schlüssel in den Konstruktor-Optionen übergeben wird,
  481. oder durch den expliziten Aufruf der <methodname>setLfiProtection()</methodname>
  482. Methode.
  483. </para>
  484. <programlisting language="php"><![CDATA[
  485. // Ausschalten über den Konstruktor
  486. $view = new Zend_View(array('lfiProtectionOn' => false));
  487. // Ausschalten über expliziten Aufruf der Methode:
  488. $view = new Zend_View();
  489. $view->setLfiProtection(false);
  490. ]]></programlisting>
  491. </sect3>
  492. </sect2>
  493. </sect1>