-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathescapeshellcmd.xml
More file actions
141 lines (129 loc) · 5.13 KB
/
escapeshellcmd.xml
File metadata and controls
141 lines (129 loc) · 5.13 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 62126c55f1c6ed444043e7272c4f9e233818a44b Maintainer: mch Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.escapeshellcmd" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>escapeshellcmd</refname>
<refpurpose>Экранирует метасимволы командной строки</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>escapeshellcmd</methodname>
<methodparam><type>string</type><parameter>command</parameter></methodparam>
</methodsynopsis>
<para>
Команда <function>escapeshellcmd</function> экранирует любые символы в
строке, которые могут быть использованы для обмана команды оболочки при выполнении
произвольных команд. Эта функция должна быть использована, чтобы убедиться,
что любые данные, вводимые пользователем, будут экранированы перед передачей их
функциям <function>exec</function> или
<function>system</function> или оператору <link
linkend="language.operators.execution">"обратный апостроф"</link>.
</para>
<para>
Следующие символы будут экранированы при помощи обратного слеша:
<literal>&#;`|*?~<>^()[]{}$\</literal>, <literal>\x0A</literal>
и <literal>\xFF</literal>. Символы <literal>'</literal> и <literal>"</literal>
экранируются только в том случае, если они встречаются не попарно. В Windows все
этим символам, плюс <literal>!</literal> и <literal>%</literal> предшествует символ каретки
(<literal>^</literal>).
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>command</parameter></term>
<listitem>
<para>
Команда, которую заэкранирует функция.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция возвращает экранированную строку.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Пример использования функции <function>escapeshellcmd</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Намеренное допущение произвольного количества аргументов
$command = './configure '.$_POST['configure_options'];
$escaped_command = escapeshellcmd($command);
system($escaped_command);
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<warning xmlns="http://docbook.org/ns/docbook">
<para>
Функцию <function>escapeshellcmd</function> следует использовать над всей
командной строкой, но она всё ещё позволяет атакующему передать
произвольное количество аргументов. Для экранирования одного аргумента
вместо неё необходимо использовать функцию <function>escapeshellarg</function>.
</para>
</warning>
<warning xmlns="http://docbook.org/ns/docbook">
<para>
Функция <function>escapeshellcmd</function> не будет экранировать пробелы,
что может стать причиной проблем в ОС Windows с путями наподобие:
<literal>C:\Program Files\ProgramName\program.exe</literal>.
Проблему минимизируют следующим фрагментом кода:
<programlisting role="php">
<![CDATA[
<?php
$cmd = preg_replace('`(?<!^) `', '^ ', escapeshellcmd($cmd));
]]>
</programlisting>
</para>
</warning>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>escapeshellarg</function></member>
<member><function>exec</function></member>
<member><function>popen</function></member>
<member><function>system</function></member>
<member><link linkend="language.operators.execution">Оператор исполнения</link></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->