-
Notifications
You must be signed in to change notification settings - Fork 164
Expand file tree
/
Copy pathescapeshellcmd.xml
More file actions
141 lines (131 loc) · 4.23 KB
/
escapeshellcmd.xml
File metadata and controls
141 lines (131 loc) · 4.23 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"?>
<!-- $Revision$ -->
<!-- EN-Revision: 62126c55f1c6ed444043e7272c4f9e233818a44b Maintainer: yannick Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.escapeshellcmd" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>escapeshellcmd</refname>
<refpurpose>Protège les caractères spéciaux du Shell</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> échappe tous les
caractères de la chaîne <parameter>command</parameter>
qui pourraient avoir une signification spéciale dans une
commande Shell. Cette fonction permet de s'assurer que la commande sera
correctement passée à l'exécuteur de commande Shell
<function>exec</function> et <function>system</function>, ou encore
à <link linkend="language.operators.execution">guillemets obliques</link>.
</para>
<para>
Les caractères suivants seront échappés :
<literal>&#;`|*?~<>^()[]{}$\</literal>, <literal>\x0A</literal>
et <literal>\xFF</literal>. <literal>'</literal> et <literal>"</literal>
ne sont échappés que s'ils ne sont pas par paire. Sous Windows, tous ces caractères
ainsi que <literal>%</literal> et <literal>!</literal> sont précédés d'un
accent circonflexe (<literal>^</literal>).
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>command</parameter></term>
<listitem>
<para>
La commande à échapper.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
La chaîne échappée.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Exemple avec <function>escapeshellcmd</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Nous autorisons un nombre arbitraire d'arguments de façon intentionnelle ici.
$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>
La fonction <function>escapeshellcmd</function> doit être utilisée
sur toute la chaîne de commande, mais elle autorise tout de même
un attaquant à passer un nombre arbitraire d'arguments.
Pour échapper un seul argument, la fonction
<function>escapeshellarg</function> devrait être utilisée à la place.
</para>
</warning>
<warning xmlns="http://docbook.org/ns/docbook">
<para>
Les espaces ne sont pas échappés par <function>escapeshellcmd</function>
ce qui peut être problématique sur Windows avec des chemins tels que :
<literal>C:\Program Files\ProgramName\program.exe</literal>.
Ceci peut être atténué en utilisant l'extrait de code suivant :
<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">les guillemets obliques</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
-->