Skip to content

Commit

Permalink
Update pattern.modifiers.xml
Browse files Browse the repository at this point in the history
  • Loading branch information
ManueldG authored Feb 10, 2025
1 parent 340d2b0 commit 752ea4b
Showing 1 changed file with 168 additions and 1 deletion.
169 changes: 168 additions & 1 deletion reference/pcre/pattern.modifiers.xml
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,171 @@
<programlisting role="php">
<![CDATA[
<?php
$html = $_POST['html'];
// uppercase headings
$html = preg_replace(
'(<h([1-6])>(.*?)</h\1>)e',
'"<h$1>" . strtoupper("$2") . "</h$1>"',
$html
);
]]>
</programlisting>
</informalexample>
<para>
L'esempio qui sopra può essere facilmente sfruttato passando una stringa come
<literal>&lt;h1&gt;{${eval($_GET[php_code])}}&lt;/h1&gt;</literal>. Questo dà
all'attaccante la possibiltà di eseguire codice PHP arbitrario e ciò gli permette
un access quasi totale al server.
</para>
<para>
Per evitare questo tipo di vulnerabilità, la funzione
<function>preg_replace_callback</function> deve essere utilizzata al suo posto:
</para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$html = $_POST['html'];
// uppercase headings
$html = preg_replace_callback(
'(<h([1-6])>(.*?)</h\1>)',
function ($m) {
return "<h$m[1]>" . strtoupper($m[2]) . "</h$m[1]>";
},
$html
);
]]>
</programlisting>
</informalexample>
</caution>
<note>
<para>
Soltanto <function>preg_replace</function> utilizza questo modificatore;
le altre funzioni di PCRE lo ignorano.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>A</emphasis> (<literal>PCRE_ANCHORED</literal>)</term>
<listitem>
<simpara>
Se si specifica questo modificatore, si forza un 'ancoraggio'
del criterio di ricerca. In pratica questo viene costretto
a riconoscere il testo su cui si fa la ricerca solo dall'inizio.
Questo effetto può essere ottenuto anche con particolari
costruzioni dell'espressione regolare, che rappresentano gli
unici modi utilizzabili in Perl per ottenere il medesimo scopo.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>D</emphasis> (<literal>PCRE_DOLLAR_ENDONLY</literal>)</term>
<listitem>
<simpara>
L'uso di questo modificatore forza il carattere $ dell'espressione
regolare a indicare la fine della stringa oggetto della ricerca.
Senza questo modificatore il carattere $ indica la posizione subito
prima dell'ultimo carattere se questo è un "a capo" (ma comunque
non prima di ogni altro "a capo"). Questo modificatore viene ignorato
se è attivato il modificatore <emphasis>m</emphasis>. Non vi sono
flag equivalenti in Perl.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>S</emphasis></term>
<listitem>
<simpara>
Quando una espressione regolare è destinata ad essere utilizzata
diverse volte, vale la pena dedicare del tempo ad ottimizzare
la velocità di riconoscimento. L'uso di questo modificatore permette
questa analisi. Al momento lo studio della velocità è significativo
per i criteri di ricerca "non ancorati", cioè espressioni che non
hanno un carattere di partenza fisso.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>U</emphasis> (<literal>PCRE_UNGREEDY</literal>)</term>
<listitem>
<simpara>
Questo modificatore inverte la "golosità" delle occorrenze, in modo
da non essere golose per default, ma lo tornano ad essere se
seguiti da <literal>?</literal>. Questo flag non è compatibile con Perl.
Questo comportamento può anche essere settato dalla sequenza (<literal>?U</literal>)
<link linkend="regexp.reference.internal-options">settaggio dei modificatori
all'interno del criterio di ricerca</link> o da un punto di domanda vicino ad un quantificatore (es.
<literal>.*?</literal>).
</simpara>
<note>
<para>
Normalmente non è possibile eseguire una corrispondenza con più di <link
linkend="ini.pcre.backtrack-limit">pcre.backtrack_limit</link>
caratteri in modalità non golosa.
</para>
</note>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>X</emphasis> (<literal>PCRE_EXTRA</literal>)</term>
<listitem>
<simpara>
Questo modificatore attiva funzionalità addizionali di PCRE
che sono incompatibili con Perl. Ogni backslash (\) posto
nell'espressione regolare che non sia seguito da una lettera
con significato speciale causa un errore, ciò per riservare
queste sequenze a future espansioni. Per default, Perl
considera il backslash (\) seguito da una lettera priva di
significato speciale come un qualsiasi testo. Al momento non
vi sono altre caratteristiche gestite tramite questo modificatore.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>J</emphasis> (<literal>PCRE_INFO_JCHANGED</literal>)</term>
<listitem>
<simpara>
L'opzione di configurazione interna (?J) cambia l'opzione locale <literal>PCRE_DUPNAMES</literal>
Permette la duplicazione dei nomi per le sottoregole.
</simpara>
</listitem>
</varlistentry>
<varlistentry>
<term><emphasis>u</emphasis> (<literal>PCRE_UTF8</literal>)</term>
<listitem>
<simpara>
Questo modificatore attiva funzionalità di PCRE che sono
incompatibili con Perl. Le stringhe di ricerca sono considerate
come UTF-8. Questo modificatore è disponibile dalla versione
4.1.0 di PHP di Unix e dalla versione 4.2.3 sulla piattaforma win32.
La validità UTF-8 della regola è controllata da PHP 4.3.5.
</simpara>
</listitem>
</varlistentry>
</variablelist>
</blockquote>
</para>
</article>

<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->

0 comments on commit 752ea4b

Please sign in to comment.