Escape shell metacharacters (original) (raw)
escapeshellcmd
(PHP 4, PHP 5, PHP 7)
escapeshellcmd — Escape shell metacharacters
Description
escapeshellcmd ( string $command
) : string
Following characters are preceded by a backslash:&#;`|*?~<>^()[]{}$\
, \x0A
and \xFF
. '
and "
are escaped only if they are not paired. On Windows, all these characters plus %
and !
are preceded by a caret (^
).
Parameters
command
The command that will be escaped.
Return Values
The escaped string.
Examples
Example #1 escapeshellcmd() example
<?php // We allow arbitrary number of arguments intentionally here. <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>c</mi><mi>o</mi><mi>m</mi><mi>m</mi><mi>a</mi><mi>n</mi><mi>d</mi><msup><mo>=</mo><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mi mathvariant="normal">.</mi><mi mathvariant="normal">/</mi><mi>c</mi><mi>o</mi><mi>n</mi><mi>f</mi><mi>i</mi><mi>g</mi><mi>u</mi><mi>r</mi><msup><mi>e</mi><mo mathvariant="normal" lspace="0em" rspace="0em">′</mo></msup><mi mathvariant="normal">.</mi></mrow><annotation encoding="application/x-tex">command = './configure '.</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.7519em;"></span><span class="mord mathnormal">co</span><span class="mord mathnormal">mman</span><span class="mord mathnormal">d</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel"><span class="mrel">=</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.0019em;vertical-align:-0.25em;"></span><span class="mord">./</span><span class="mord mathnormal">co</span><span class="mord mathnormal">n</span><span class="mord mathnormal" style="margin-right:0.10764em;">f</span><span class="mord mathnormal">i</span><span class="mord mathnormal">gu</span><span class="mord mathnormal" style="margin-right:0.02778em;">r</span><span class="mord"><span class="mord mathnormal">e</span><span class="msupsub"><span class="vlist-t"><span class="vlist-r"><span class="vlist" style="height:0.7519em;"><span style="top:-3.063em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord mtight">′</span></span></span></span></span></span></span></span></span><span class="mord">.</span></span></span></span>_POST['configure_options'];$escaped_command = escapeshellcmd($command);system($escaped_command); ?>
Warning
escapeshellcmd() should be used on the whole command string, and it still allows the attacker to pass arbitrary number of arguments. For escaping a single argument escapeshellarg() should be used instead.
Changelog
Version | Description |
---|---|
5.4.43, 5.5.27, 5.6.11 | Exclamation marks are replaced by spaces. |
5.3.0 | On Windows, the special characters are now properly escaped. Previously, they have been replaced with a space character. |
See Also
- escapeshellarg() - Escape a string to be used as a shell argument
- exec() - Execute an external program
- popen() - Opens process file pointer
- system() - Execute an external program and display the output
- backtick operator