-
Notifications
You must be signed in to change notification settings - Fork 82
Expand file tree
/
Copy pathescapeshellcmd.xml
More file actions
144 lines (135 loc) · 4.61 KB
/
escapeshellcmd.xml
File metadata and controls
144 lines (135 loc) · 4.61 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
142
143
144
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 62126c55f1c6ed444043e7272c4f9e233818a44b Maintainer: takagi Status: ready -->
<!-- splitted from ./en/functions/exec.xml, last change in rev 1.2 -->
<!-- CREDITS: hirokawa,shimooka,mumumu -->
<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
-->