1
0
mirror of https://github.com/php/doc-ru.git synced 2026-03-25 16:22:18 +01:00
Files
archived-doc-ru/reference/exec/functions/escapeshellcmd.xml
2024-05-14 19:10:19 +03:00

142 lines
5.1 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?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>&amp;#;`|*?~&lt;&gt;^()[]{}$\</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
-->