113113 <programlisting role =" php" >
114114<![CDATA[
115115<?php
116-
116+ $html = $_POST['html'];
117+
118+ // uppercase headings
119+ $html = preg_replace(
120+ '(<h([1-6])>(.*?)</h\1>)e',
121+ '"<h$1>" . strtoupper("$2") . "</h$1>"',
122+ $html
123+ );
124+ ]]>
125+ </programlisting >
126+ </informalexample >
127+ <para >
128+ L'esempio qui sopra può essere facilmente sfruttato passando una stringa come
129+ <literal >< h1> {${eval($_GET[php_code])}}< /h1> </literal >. Questo dà
130+ all'attaccante la possibiltà di eseguire codice PHP arbitrario e ciò gli permette
131+ un access quasi totale al server.
132+ </para >
133+ <para >
134+ Per evitare questo tipo di vulnerabilità, la funzione
135+ <function >preg_replace_callback</function > deve essere utilizzata al suo posto:
136+ </para >
137+ <informalexample >
138+ <programlisting role =" php" >
139+ <![CDATA[
140+ <?php
141+ $html = $_POST['html'];
142+
143+ // uppercase headings
144+ $html = preg_replace_callback(
145+ '(<h([1-6])>(.*?)</h\1>)',
146+ function ($m) {
147+ return "<h$m[1]>" . strtoupper($m[2]) . "</h$m[1]>";
148+ },
149+ $html
150+ );
151+ ]]>
152+ </programlisting >
153+ </informalexample >
154+ </caution >
155+ <note >
156+ <para >
157+ Soltanto <function >preg_replace</function > utilizza questo modificatore;
158+ le altre funzioni di PCRE lo ignorano.
159+ </para >
160+ </note >
161+ </listitem >
162+ </varlistentry >
163+ <varlistentry >
164+ <term ><emphasis >A</emphasis > (<literal >PCRE_ANCHORED</literal >)</term >
165+ <listitem >
166+ <simpara >
167+ Se si specifica questo modificatore, si forza un 'ancoraggio'
168+ del criterio di ricerca. In pratica questo viene costretto
169+ a riconoscere il testo su cui si fa la ricerca solo dall'inizio.
170+ Questo effetto può essere ottenuto anche con particolari
171+ costruzioni dell'espressione regolare, che rappresentano gli
172+ unici modi utilizzabili in Perl per ottenere il medesimo scopo.
173+ </simpara >
174+ </listitem >
175+ </varlistentry >
176+ <varlistentry >
177+ <term ><emphasis >D</emphasis > (<literal >PCRE_DOLLAR_ENDONLY</literal >)</term >
178+ <listitem >
179+ <simpara >
180+ L'uso di questo modificatore forza il carattere $ dell'espressione
181+ regolare a indicare la fine della stringa oggetto della ricerca.
182+ Senza questo modificatore il carattere $ indica la posizione subito
183+ prima dell'ultimo carattere se questo è un "a capo" (ma comunque
184+ non prima di ogni altro "a capo"). Questo modificatore viene ignorato
185+ se è attivato il modificatore <emphasis >m</emphasis >. Non vi sono
186+ flag equivalenti in Perl.
187+ </simpara >
188+ </listitem >
189+ </varlistentry >
190+ <varlistentry >
191+ <term ><emphasis >S</emphasis ></term >
192+ <listitem >
193+ <simpara >
194+ Quando una espressione regolare è destinata ad essere utilizzata
195+ diverse volte, vale la pena dedicare del tempo ad ottimizzare
196+ la velocità di riconoscimento. L'uso di questo modificatore permette
197+ questa analisi. Al momento lo studio della velocità è significativo
198+ per i criteri di ricerca "non ancorati", cioè espressioni che non
199+ hanno un carattere di partenza fisso.
200+ </simpara >
201+ </listitem >
202+ </varlistentry >
203+ <varlistentry >
204+ <term ><emphasis >U</emphasis > (<literal >PCRE_UNGREEDY</literal >)</term >
205+ <listitem >
206+ <simpara >
207+ Questo modificatore inverte la "golosità" delle occorrenze, in modo
208+ da non essere golose per default, ma lo tornano ad essere se
209+ seguiti da <literal >?</literal >. Questo flag non è compatibile con Perl.
210+ Questo comportamento può anche essere settato dalla sequenza (<literal >?U</literal >)
211+ <link linkend =" regexp.reference.internal-options" >settaggio dei modificatori
212+ all'interno del criterio di ricerca</link > o da un punto di domanda vicino ad un quantificatore (es.
213+ <literal >.*?</literal >).
214+ </simpara >
215+ <note >
216+ <para >
217+ Normalmente non è possibile eseguire una corrispondenza con più di <link
218+ linkend =" ini.pcre.backtrack-limit" >pcre.backtrack_limit</link >
219+ caratteri in modalità non golosa.
220+ </para >
221+ </note >
222+ </listitem >
223+ </varlistentry >
224+ <varlistentry >
225+ <term ><emphasis >X</emphasis > (<literal >PCRE_EXTRA</literal >)</term >
226+ <listitem >
227+ <simpara >
228+ Questo modificatore attiva funzionalità addizionali di PCRE
229+ che sono incompatibili con Perl. Ogni backslash (\) posto
230+ nell'espressione regolare che non sia seguito da una lettera
231+ con significato speciale causa un errore, ciò per riservare
232+ queste sequenze a future espansioni. Per default, Perl
233+ considera il backslash (\) seguito da una lettera priva di
234+ significato speciale come un qualsiasi testo. Al momento non
235+ vi sono altre caratteristiche gestite tramite questo modificatore.
236+ </simpara >
237+ </listitem >
238+ </varlistentry >
239+ <varlistentry >
240+ <term ><emphasis >J</emphasis > (<literal >PCRE_INFO_JCHANGED</literal >)</term >
241+ <listitem >
242+ <simpara >
243+ L'opzione di configurazione interna (?J) cambia l'opzione locale <literal >PCRE_DUPNAMES</literal >
244+ Permette la duplicazione dei nomi per le sottoregole.
245+ </simpara >
246+ </listitem >
247+ </varlistentry >
248+ <varlistentry >
249+ <term ><emphasis >u</emphasis > (<literal >PCRE_UTF8</literal >)</term >
250+ <listitem >
251+ <simpara >
252+ Questo modificatore attiva funzionalità di PCRE che sono
253+ incompatibili con Perl. Le stringhe di ricerca sono considerate
254+ come UTF-8. Questo modificatore è disponibile dalla versione
255+ 4.1.0 di PHP di Unix e dalla versione 4.2.3 sulla piattaforma win32.
256+ La validità UTF-8 della regola è controllata da PHP 4.3.5.
257+ </simpara >
258+ </listitem >
259+ </varlistentry >
260+ </variablelist >
261+ </blockquote >
262+ </para >
263+ </article >
264+
265+ <!-- Keep this comment at the end of the file
266+ Local variables:
267+ mode: sgml
268+ sgml-omittag:t
269+ sgml-shorttag:t
270+ sgml-minimize-attributes:nil
271+ sgml-always-quote-attributes:t
272+ sgml-indent-step:1
273+ sgml-indent-data:t
274+ indent-tabs-mode:nil
275+ sgml-parent-document:nil
276+ sgml-default-dtd-file:"~/.phpdoc/manual.ced"
277+ sgml-exposed-tags:nil
278+ sgml-local-catalogs:nil
279+ sgml-local-ecat-files:nil
280+ End:
281+ vim600: syn=xml fen fdm=syntax fdl=2 si
282+ vim: et tw=78 syn=sgml
283+ vi: ts=1 sw=1
284+ -->
0 commit comments