2
0

migration-17.xml 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- EN-Revision: 18833 -->
  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. <command>Zend_Filter_File_Rename($oldfile, $newfile,
  60. $overwrite)</command>
  61. </para></listitem>
  62. <listitem><para>
  63. Neue <acronym>API</acronym> der Methode:
  64. <command>Zend_Filter_File_Rename($options)</command> 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. <command>Zend_Validate_File_Count($min, $max)</command>
  94. </para></listitem>
  95. <listitem><para>
  96. Neue <acronym>API</acronym> der Methode:
  97. <command>Zend_Validate_File_Count($options)</command> 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. <command>Zend_Validate_File_Extension($extension, $case)</command>
  125. </para></listitem>
  126. <listitem><para>
  127. Neue <acronym>API</acronym> der Methode:
  128. <command>Zend_Validate_File_Extension($options)</command> 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. <command>Zend_Validate_File_FilesSize($min, $max, $bytestring)</command>
  157. </para></listitem>
  158. <listitem><para>
  159. Neue <acronym>API</acronym> der Methode:
  160. <command>Zend_Validate_File_FilesSize($options)</command> wobei
  161. <varname>$options</varname> die folgenden Schlüssel für das Array
  162. akzeptiert: <emphasis>min</emphasis> identisch mit <varname>$min</varname>,
  163. <emphasis>max</emphasis> identisch mit <varname>$max</varname>,
  164. <emphasis>bytestring</emphasis> identisch mit <varname>$bytestring</varname>
  165. </para></listitem>
  166. </itemizedlist>
  167. <para>
  168. Zustätzlich wurde die Signatur der <methodname>useByteString()</methodname>
  169. Methode geändert. Sie kann nur verwendet werden um zu testen ob die Prüfung
  170. ByteStrings in den erzeugten Meldungen verwendet oder ncht. Um den Wert dieses
  171. Flags zu setzen muß die <methodname>setUseByteString()</methodname> Methode
  172. verwendet werden.
  173. </para>
  174. <example id="migration.17.zend.file.transfer.validators.filessize.example">
  175. <title>Änderungen für die FilesSize Prüfung von 1.6 zu 1.7</title>
  176. <programlisting language="php"><![CDATA[
  177. // Beispiel für 1.6
  178. $upload = new Zend_File_Transfer_Adapter_Http();
  179. $upload->addValidator('FilesSize',
  180. array(100, 10000, true));
  181. // Gleiches Beispiel für 1.7
  182. $upload = new Zend_File_Transfer_Adapter_Http();
  183. $upload->addValidator('FilesSize',
  184. false,
  185. array('min' => 100,
  186. 'max' => 10000,
  187. 'bytestring' => true));
  188. // Beispiel für 1.6
  189. $upload->useByteString(true); // Flag setzen
  190. // Gleiches Beispiel für 1.7
  191. $upload->setUseByteSting(true); // Flag setzen
  192. ]]></programlisting>
  193. </example>
  194. </sect4>
  195. <sect4 id="migration.17.zend.file.transfer.validators.hash">
  196. <title>Prüfung: Hash</title>
  197. <itemizedlist>
  198. <listitem><para>
  199. Alte <acronym>API</acronym> der Methode:
  200. <command>Zend_Validate_File_Hash($hash, $algorithm)</command>
  201. </para></listitem>
  202. <listitem><para>
  203. Neue <acronym>API</acronym> der Methode:
  204. <command>Zend_Validate_File_Hash($options)</command> wobei
  205. <varname>$options</varname> die folgenden Schlüssel für das Array
  206. akzeptiert: <emphasis>*</emphasis> identisch mit <varname>$hash</varname>
  207. und kann jeden anderen Schlüssel haben <emphasis>algorithm</emphasis>
  208. identisch mit <varname>$algorithm</varname>
  209. </para></listitem>
  210. </itemizedlist>
  211. <example id="migration.17.zend.file.transfer.validators.hash.example">
  212. <title>Änderungen für die Hash Prüfung von 1.6 zu 1.7</title>
  213. <programlisting language="php"><![CDATA[
  214. // Beispiel für 1.6
  215. $upload = new Zend_File_Transfer_Adapter_Http();
  216. $upload->addValidator('Hash',
  217. array('12345', 'md5'));
  218. // Gleiches Beispiel für 1.7
  219. $upload = new Zend_File_Transfer_Adapter_Http();
  220. $upload->addValidator('Hash',
  221. false,
  222. array('hash1' => '12345',
  223. 'algorithm' => 'md5'));
  224. ]]></programlisting>
  225. </example>
  226. </sect4>
  227. <sect4 id="migration.17.zend.file.transfer.validators.imagesize">
  228. <title>Prüfung: ImageSize</title>
  229. <itemizedlist>
  230. <listitem><para>
  231. Alte <acronym>API</acronym> der Methode:
  232. <command>Zend_Validate_File_ImageSize($minwidth, $minheight, $maxwidth,
  233. $maxheight)</command>
  234. </para></listitem>
  235. <listitem><para>
  236. Neue <acronym>API</acronym> der Methode:
  237. <command>Zend_Validate_File_FilesSize($options)</command> wobei
  238. <varname>$options</varname> die folgenden Schlüssel für das Array
  239. akzeptiert: <emphasis>minwidth</emphasis> identisch mit
  240. <varname>$minwidth</varname>, <emphasis>maxwidth</emphasis> identisch mit
  241. <varname>$maxwidth</varname>, <emphasis>minheight</emphasis> identisch mit
  242. <varname>$minheight</varname>, <emphasis>maxheight</emphasis> identisch mit
  243. <varname>$maxheight</varname>
  244. </para></listitem>
  245. </itemizedlist>
  246. <example id="migration.17.zend.file.transfer.validators.imagesize.example">
  247. <title>Änderungen für die ImageSize Prüfung von 1.6 zu 1.7</title>
  248. <programlisting language="php"><![CDATA[
  249. // Beispiel für 1.6
  250. $upload = new Zend_File_Transfer_Adapter_Http();
  251. $upload->addValidator('ImageSize',
  252. array(10, 10, 100, 100));
  253. // Gleiches Beispiel für 1.7
  254. $upload = new Zend_File_Transfer_Adapter_Http();
  255. $upload->addValidator('ImageSize',
  256. false,
  257. array('minwidth' => 10,
  258. 'minheight' => 10,
  259. 'maxwidth' => 100,
  260. 'maxheight' => 100));
  261. ]]></programlisting>
  262. </example>
  263. </sect4>
  264. <sect4 id="migration.17.zend.file.transfer.validators.size">
  265. <title>Prüfung: Size</title>
  266. <itemizedlist>
  267. <listitem><para>
  268. Alte <acronym>API</acronym> der Methode:
  269. <command>Zend_Validate_File_Size($min, $max, $bytestring)</command>
  270. </para></listitem>
  271. <listitem><para>
  272. Neue <acronym>API</acronym> der Methode:
  273. <command>Zend_Validate_File_Size($options)</command> wobei
  274. <varname>$options</varname> die folgenden Schlüssel für das Array
  275. akzeptiert: <emphasis>min</emphasis> identisch mit <varname>$min</varname>,
  276. <emphasis>max</emphasis> identisch mit <varname>$max</varname>,
  277. <emphasis>bytestring</emphasis> identisch mit <varname>$bytestring</varname>
  278. </para></listitem>
  279. </itemizedlist>
  280. <example id="migration.17.zend.file.transfer.validators.size.example">
  281. <title>Änderungen für die Size Prüfung von 1.6 zu 1.7</title>
  282. <programlisting language="php"><![CDATA[
  283. // Beispiel für 1.6
  284. $upload = new Zend_File_Transfer_Adapter_Http();
  285. $upload->addValidator('Size',
  286. array(100, 10000, true));
  287. // Gleiches Beispiel für 1.7
  288. $upload = new Zend_File_Transfer_Adapter_Http();
  289. $upload->addValidator('Size',
  290. false,
  291. array('min' => 100,
  292. 'max' => 10000,
  293. 'bytestring' => true));
  294. ]]></programlisting>
  295. </example>
  296. </sect4>
  297. </sect3>
  298. </sect2>
  299. <sect2 id="migration.17.zend.locale">
  300. <title>Zend_Locale</title>
  301. <sect3 id="migration.17.zend.locale.islocale">
  302. <title>Änderungen bei der Verwendung von isLocale()</title>
  303. <para>
  304. Bezugnehmend auf den Codingstandard mußte <methodname>isLocale()</methodname> so
  305. geändert werden das es ein Boolean zurückgibt. In vorhergehenden Releases wurde im
  306. Erfolgsfall ein String zurückgegeben. Für das Release 1.7 wurde ein
  307. Kompatibilitätsmodus hinzugefügt der es erlaubt das alte Verhalten, das ein String
  308. zurückgegeben wird, zu verwenden, aber das triggert auch eine User Warning die
  309. darauf hinweist das man auf das neue Verhalten wechseln sollte. Das Rerouting
  310. welches das alte Verhalten von <methodname>isLocale()</methodname> durchgeführt
  311. hätte ist nicht länger notwendig, da alle I18N Komponenten jetzt das Rerouting
  312. selbst durchführen.
  313. </para>
  314. <para>
  315. Um die Skripte auf die neue <acronym>API</acronym> zu migrieren muß die Methode
  316. einfach wie anbei gezeigt verwendet werden.
  317. </para>
  318. <example id="migration.17.zend.locale.example">
  319. <title>Wie man isLocale() von 1.6 nach 1.7 ändern muß</title>
  320. <programlisting language="php"><![CDATA[
  321. // Beispiel für 1.6
  322. if ($locale = Zend_Locale::isLocale($locale)) {
  323. // mach was
  324. }
  325. // Selbes Beispiel für 1.7
  326. // Man sollte den Kompatibilitätsmodus ändern um User Warnings zu verhindern
  327. // Aber man kann das in der Bootstrap tun
  328. Zend_Locale::$compatibilityMode = false;
  329. if (Zend_Locale::isLocale($locale)) {
  330. }
  331. ]]></programlisting>
  332. <para>
  333. Es ist zu beachten das man den zweiten Parameter verwendet kann um zu sehen ob
  334. das Gebietsschema richtig ist ohne das ein Rerouting durchgeführt wird.
  335. </para>
  336. <programlisting language="php"><![CDATA[
  337. // Beispiel für 1.6
  338. if ($locale = Zend_Locale::isLocale($locale, false)) {
  339. // mach was
  340. }
  341. // Selbes Beispiel für 1.7
  342. // Man sollte den Kompatibilitätsmodus ändern um User Warnings zu verhindern
  343. // Aber man kann das in der Bootstrap tun
  344. Zend_Locale::$compatibilityMode = false;
  345. if (Zend_Locale::isLocale($locale, false)) {
  346. if (Zend_Locale::isLocale($locale, true)) {
  347. // gar kein Gebietsschema
  348. }
  349. // Original String ist kein Gebietsschema, kann aber Reroutet werden
  350. }
  351. ]]></programlisting>
  352. </example>
  353. </sect3>
  354. <sect3 id="migration.17.zend.locale.getdefault">
  355. <title>Änderungen bei der Verwendung von getDefault()</title>
  356. <para>
  357. Die Bedeutung der <methodname>getDefault()</methodname> Methode wurde verändert
  358. durch den Fakt das Framework-weite Gebietsschemata integriert wurden welche mit
  359. <methodname>setDefault()</methodname> gesetzt werden können. Deswegen gibe es nicht
  360. mehr die Kette der Gebietsschemata zurück sondern nur die gesetzten Framework-weiten
  361. Gebietsschemata.
  362. </para>
  363. <para>
  364. Um die eigenen Skripte auf die neue <acronym>API</acronym> zu migrieren, muß einfach
  365. die Methode wie unten gezeigt verwendet werden.
  366. </para>
  367. <example id="migration.17.zend.locale.getdefault.example">
  368. <title>Wie man getDefault() von 1.6 auf 1.7 ändert</title>
  369. <programlisting language="php"><![CDATA[
  370. // Beispiel für 1.6
  371. $locales = $locale->getDefault(Zend_Locale::BROWSER);
  372. // Selbes Beispiel für 1.7
  373. // Man sollte den Compatibility Mode setzen um User Notices zu verhindern
  374. // Das kann in der Bootstrap Datei getan werden
  375. Zend_Locale::$compatibilityMode = false;
  376. $locale = Zend_Locale::getOrder(Zend_Locale::BROWSER);
  377. ]]></programlisting>
  378. <para>
  379. Es ist zu beachten das der zweite Parameter der alten
  380. <methodname>getDefault()</methodname> Implementation nicht mehr vorhanden ist,
  381. aber die zurückgegebenen Werte die gleichen sind.
  382. </para>
  383. </example>
  384. <note>
  385. <para>
  386. Standardmäßig ist das alte Verhalten noch immer aktiv, wirft aber eine User
  387. Notice. Wenn man den eigenen Code zum neuen Verhalten geändert hat sollte man
  388. auch den Compatibility Mode auf false setzen damit keine Notices mehr geworfen
  389. werden.
  390. </para>
  391. </note>
  392. </sect3>
  393. </sect2>
  394. <sect2 id="migration.17.zend.translate">
  395. <title>Zend_Translate</title>
  396. <sect3 id="migration.17.zend.translate.languages">
  397. <title>Setzen von Sprachen</title>
  398. <para>
  399. Wenn man die automatische Erkennung von Sprachen verwendet, oder Sprachen manuell
  400. auf <classname>Zend_Translate</classname> setzt kann es sein das man von Zeit zu
  401. Zeit eine Notiz geworfen bekommen die über nicht hinzugefügte oder leere
  402. Übersetzungen schreibt. In einigen vorhergehenden Releases wurde in einigen Fällen
  403. auch eine Exception geworfen.
  404. </para>
  405. <para>
  406. Der Grund ist, das wenn ein Benutzer eine nicht existierende Sprache anfragt, man
  407. einfach keinen Weg hat um festzustellen was falsch ist. Deswegen haben wir diese
  408. Notizen hinzugefügt die einem in den eigenen Logs zeigen das der Benutzer eine
  409. Sprache angefragt hat die man nicht unterstützt. Es ist zu beachten das der Code,
  410. selbst wenn eine Notiz getriggert wird, weiterhin ohne Probleme arbeitet.
  411. </para>
  412. <para>
  413. Aber wenn man einen eigenen Fehler oder Exception Handler, wie XDebug, verwendet
  414. wird man alle Notizen zurückerhalten, selbst wenn man das nicht gewollt hat. Das ist
  415. der Fall, weil diese Handler alle Einstellungen von <acronym>PHP</acronym> selbst
  416. überschreiben.
  417. </para>
  418. <para>
  419. Um diese Notizen wegzubekommen kann man einfach die neue Option 'disableNotices' auf
  420. true setzen. Der Standardwert ist false.
  421. </para>
  422. <example id="migration.17.zend.translate.example">
  423. <title>Setzen von Sprachen ohne das man Notizen erhält</title>
  424. <para>
  425. Nehmen wir an das wir 'en' vorhanden haben und unser Benutzer 'fr' anfragt was
  426. nicht in unserem Portfolio der übersetzten Sprachen ist.
  427. </para>
  428. <programlisting language="php"><![CDATA[
  429. $language = new Zend_Translate('gettext',
  430. '/path/to/translations',
  431. 'auto');
  432. ]]></programlisting>
  433. <para>
  434. In diesem Fall werden wir eine Notiz darüber erhalten das die Sprache 'fr' nicht
  435. vorhanden ist. Durch das einfache Hinzufügen der Option wird die Notiz
  436. abgeschaltet.
  437. </para>
  438. <programlisting language="php"><![CDATA[
  439. $language = new Zend_Translate('gettext',
  440. '/path/to/translations',
  441. 'auto',
  442. array('disableNotices' => true));
  443. ]]></programlisting>
  444. </example>
  445. </sect3>
  446. </sect2>
  447. <sect2 id="migration.17.zend.view">
  448. <title>Zend_View</title>
  449. <note>
  450. <para>
  451. Die Änderung der API in <classname>Zend_View</classname> sind nur dann zu beachten
  452. wenn man zum Release 1.7.5 oder höher hochrüstet.
  453. </para>
  454. </note>
  455. <para>
  456. Vor dem 1.7.5 Release wurde das Zend Framework Team darauf aufmerksam gemacht das eine
  457. potentielle Local File Inclusion (LFI) Schwäche in der
  458. <methodname>Zend_View::render()</methodname> Methode existiert. Vor 1.7.5, erlaubte die
  459. Methode standardmäßig, die Fähigkeit View Skripte zu spezifizieren die Schreibweisen für
  460. Eltern-Verzeichnisse enthalten (z.B. "../" oder "..\"). Das öffnet die Möglichkeit für
  461. eine LFI Attacke wenn ungefilterte Benutzereingaben an die
  462. <methodname>render()</methodname> Methode übergeben werden:
  463. </para>
  464. <programlisting language="php"><![CDATA[
  465. // Wobei $_GET['foobar'] = '../../../../etc/passwd'
  466. echo $view->render($_GET['foobar']); // LFI Einbruch
  467. ]]></programlisting>
  468. <para>
  469. <classname>Zend_View</classname> wirft jetzt standardmäßig eine Ausnahme wenn so ein
  470. View Skript angefragt wird.
  471. </para>
  472. <sect3 id="zend.view.migration.zf5748.disabling">
  473. <title>Ausschalten des LFI Schutzes für die render() Methode</title>
  474. <para>
  475. Da viele Entwickler gemeldet haben das Sie so eine Schreibweise in Ihren
  476. Anwendungen verwenden die <emphasis>nicht</emphasis> das Ergebnis einer
  477. Benutzereingabe sind, wurde ein spezielles Flag erstellt um das Deaktivieren des
  478. standardmäßigen Schutzes zu erlauben. Es gibt 2 Methoden um das Durchzuführen:
  479. Indem der 'lfiProtectionOn' Schlüssel in den Konstruktor-Optionen übergeben wird,
  480. oder durch den expliziten Aufruf der <methodname>setLfiProtection()</methodname>
  481. Methode.
  482. </para>
  483. <programlisting language="php"><![CDATA[
  484. // Ausschalten über den Konstruktor
  485. $view = new Zend_View(array('lfiProtectionOn' => false));
  486. // Ausschalten über expliziten Aufruf der Methode:
  487. $view = new Zend_View();
  488. $view->setLfiProtection(false);
  489. ]]></programlisting>
  490. </sect3>
  491. </sect2>
  492. </sect1>
  493. <!--
  494. vim:se ts=4 sw=4 et:
  495. -->