Files
archived-doc-pt-br/reference/exec/functions/escapeshellcmd.xml
2025-04-10 11:26:35 -03:00

140 lines
4.2 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 62126c55f1c6ed444043e7272c4f9e233818a44b Maintainer: leonardolara Status: ready --><!-- CREDITS: fernandoc,leonardolara -->
<!-- splitted from ./en/functions/exec.xml, last change in rev 1.2 -->
<refentry xml:id="function.escapeshellcmd" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>escapeshellcmd</refname>
<refpurpose>Escapa meta-caracteres 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> escapa qualquer caractere em uma string
que possa ser utilizada para enganar um comando shell para executar
comandos arbritários. Esta função deve ser utilizada para ter certeza
que quaisquer dados vindos do usuário são escapado antes que
estes dados sejam passados para as funções <function>exec</function> ou
<function>system</function>, ou para o <link
linkend="language.operators.execution">operador
de execução</link>.
</para>
<para>
Os seguintes caracteres são precedidos por uma barra invertida:
<literal>&amp;#;`|*?~&lt;&gt;^()[]{}$\</literal>, <literal>\x0A</literal>
e <literal>\xFF</literal>. <literal>'</literal> e <literal>"</literal>
são escapados apenas se não estiverem em pares. No windows, todos estes caracteres
mais <literal>%</literal> e <literal>!</literal> são precedidos por um circunflexo
(<literal>^</literal>).
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>command</parameter></term>
<listitem>
<para>
O comando que será escapado.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
A string escapada.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Exemplo de <function>escapeshellcmd</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Permitindo número arbitrário de argumentos intencionalmente.
$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> deve ser usada na string de comando
inteira, e ainda assim permite ao intruso passar
um número arbitrário de argumentos. Para escapar um único argumento,
a função <function>escapeshellarg</function> deve ser usada em seu lugar.
</para>
</warning>
<warning xmlns="http://docbook.org/ns/docbook">
<para>
Espaços não serão escapados por <function>escapeshellcmd</function>,
o que pode ser problemático em caminhos do Windows como:
<literal>C:\Program Files\ProgramName\program.exe</literal>.
Isto pode ser mitigado usando-se o seguinte trecho de código:
<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">operador de execução</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
-->