Skip to content

Commit 6ce5431

Browse files
committed
Fix corrupted CDATA section in pcre/pattern.modifiers.xml
1 parent 83b1a3e commit 6ce5431

1 file changed

Lines changed: 169 additions & 1 deletion

File tree

reference/pcre/pattern.modifiers.xml

Lines changed: 169 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,4 +113,172 @@
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>&lt;h1&gt;{${eval($_GET[php_code])}}&lt;/h1&gt;</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

Comments
 (0)