Sophie

Sophie

distrib > Mandriva > 2008.1 > i586 > by-pkgid > 703d980c580707c382b4e43e25965bc5 > files > 66

php-manual-pt_BR-5.2.4-1mdv2008.1.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML
><HEAD
><TITLE
>Modo Seguro (Safe Mode)</TITLE
><META
NAME="GENERATOR"
CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINK
REL="HOME"
TITLE="Manual do PHP"
HREF="index.html"><LINK
REL="UP"
TITLE="Características"
HREF="features.html"><LINK
REL="PREVIOUS"
TITLE="Conexão Permanente com o Banco de Dados"
HREF="features.persistent-connections.html"><LINK
REL="NEXT"
TITLE="Funções restringidas/desabilitadas pelo modo seguro"
HREF="features.safe-mode.functions.html"><META
HTTP-EQUIV="Content-type"
CONTENT="text/html; charset=UTF-8"></HEAD
><BODY
CLASS="chapter"
BGCOLOR="#FFFFFF"
TEXT="#000000"
LINK="#0000FF"
VLINK="#840084"
ALINK="#0000FF"
><DIV
CLASS="NAVHEADER"
><TABLE
SUMMARY="Header navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TH
COLSPAN="3"
ALIGN="center"
>Manual do PHP</TH
></TR
><TR
><TD
WIDTH="10%"
ALIGN="left"
VALIGN="bottom"
><A
HREF="features.persistent-connections.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="features.safe-mode.functions.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="features.safe-mode"
>Capítulo 42. Modo Seguro (Safe Mode)</A
></H1
><DIV
CLASS="TOC"
><DL
><DT
><B
>Índice</B
></DT
><DT
><A
HREF="features.safe-mode.html#ini.sect.safe-mode"
>Segurança e Modo Seguro</A
></DT
><DT
><A
HREF="features.safe-mode.functions.html"
>Funções restringidas/desabilitadas pelo modo seguro</A
></DT
></DL
></DIV
><P
>&#13;   O modo seguro do PHP é uma tentativa de resolver o problema de servidores
   compartilhados. É arquiteturalmente incorreto tentar resolver esse
   problema no nível do PHP, mas já que as alternativas no nível dos
   servidores e dos sistemas operacionais não são muito eficientes, muitas pessoas,
   especialmente provedores de internet, usam o modo seguro por enquanto.
  </P
><DIV
CLASS="sect1"
><H1
CLASS="sect1"
><A
NAME="ini.sect.safe-mode"
>Segurança e Modo Seguro</A
></H1
><P
>&#13;          <DIV
CLASS="table"
><A
NAME="AEN7220"
></A
><P
><B
>Tabela 42-1. Diretivas de Configuração de Segurança e Modo Seguro</B
></P
><TABLE
BORDER="1"
CLASS="CALSTABLE"
><COL><COL><COL><COL><THEAD
><TR
><TH
>Nome</TH
><TH
>Valor Padrão</TH
><TH
>Alterável</TH
><TH
>Changelog</TH
></TR
></THEAD
><TBODY
><TR
><TD
>safe_mode</TD
><TD
>"0"</TD
><TD
>PHP_INI_SYSTEM</TD
><TD
>&nbsp;</TD
></TR
><TR
><TD
>safe_mode_gid</TD
><TD
>"0"</TD
><TD
>PHP_INI_SYSTEM</TD
><TD
>Disponível desde o PHP 4.1.0.</TD
></TR
><TR
><TD
>safe_mode_include_dir</TD
><TD
>NULL</TD
><TD
>PHP_INI_SYSTEM</TD
><TD
>Disponível desde o PHP 4.1.0.</TD
></TR
><TR
><TD
>safe_mode_exec_dir</TD
><TD
>""</TD
><TD
>PHP_INI_SYSTEM</TD
><TD
>&nbsp;</TD
></TR
><TR
><TD
>safe_mode_allowed_env_vars</TD
><TD
>"PHP_"</TD
><TD
>PHP_INI_SYSTEM</TD
><TD
>&nbsp;</TD
></TR
><TR
><TD
>safe_mode_protected_env_vars</TD
><TD
>"LD_LIBRARY_PATH"</TD
><TD
>PHP_INI_SYSTEM</TD
><TD
>&nbsp;</TD
></TR
><TR
><TD
>open_basedir</TD
><TD
>NULL</TD
><TD
>PHP_INI_SYSTEM</TD
><TD
>&nbsp;</TD
></TR
><TR
><TD
>disable_functions</TD
><TD
>""</TD
><TD
><TT
CLASS="filename"
>php.ini</TT
> only</TD
><TD
>Disponível desde o PHP 4.0.1.</TD
></TR
><TR
><TD
>disable_classes</TD
><TD
>""</TD
><TD
><TT
CLASS="filename"
>php.ini</TT
> only</TD
><TD
>Disponível desde o PHP 4.3.2.</TD
></TR
></TBODY
></TABLE
></DIV
>
          Para mais detalhes e definições das constantes PHP_INI_*, veja
          <A
HREF="function.ini-set.html"
><B
CLASS="function"
>ini_set()</B
></A
>.
   </P
><P
>Breve descrição das
 diretivas de configuração.</P
><P
>&#13;    <P
></P
><DIV
CLASS="variablelist"
><DL
><DT
><A
NAME="ini.safe-mode"
></A
><CODE
CLASS="parameter"
>safe_mode</CODE
>
       <A
HREF="language.types.boolean.html"
><B
CLASS="type"
>boolean</B
></A
></DT
><DD
><P
>&#13;        Determina se o modo seguro estará habilitado ou não.
       </P
></DD
><DT
><A
NAME="ini.safe-mode-gid"
></A
><CODE
CLASS="parameter"
>safe_mode_gid</CODE
>
       <A
HREF="language.types.boolean.html"
><B
CLASS="type"
>boolean</B
></A
></DT
><DD
><P
>&#13;        Por padrão, o modo seguro faz checagem comparando o UID quando
        abre arquivos. Se você quiser diminuir a especificidade do teste para compara com o GID,
        então ligue a diretiva safe_mode_gid.
        Escolher entre usar checagem de <TT
CLASS="literal"
>UID</TT
> (<TT
CLASS="constant"
><B
>FALSE</B
></TT
>)
        ou de <TT
CLASS="literal"
>GID</TT
> quando acessar
        um arquivo.
       </P
></DD
><DT
><A
NAME="ini.safe-mode-include-dir"
></A
><CODE
CLASS="parameter"
>safe_mode_include_dir</CODE
>
       <A
HREF="language.types.string.html"
><B
CLASS="type"
>string</B
></A
></DT
><DD
><P
>&#13;        Checagem de <TT
CLASS="literal"
>UID</TT
>/<TT
CLASS="literal"
>GID</TT
> não são feitas quando
        é feita inclusão de arquivos desse diretório e seus subdiretórios (diretório
        também deve estar no <A
HREF="ini.core.html#ini.include-path"
>include_path</A
>
        ou o caminho completo deve ser incluso).
       </P
><P
>&#13;        A partir do PHP 4.2.0, essa diretiva pode receber vários diretórios separados
        por dois pontos (ponto-e-vírgula no Windows) similar à
        diretiva <A
HREF="ini.core.html#ini.include-path"
>include_path</A
>,
        ao contrário de apenas um diretório
       </P
><P
>&#13;        A restrição especificada é, na verdade, um prefixo, não um nome de diretório.
        Isso significa que "safe_mode_include_dir = /dir/incl" também permite
        acesso a "/dir/include" e "/dir/incls" se eles existirem. Quando você
        quiser restringir o acesso apenas ao diretório especificado, termine com uma
        barra. Por exemplo: "safe_mode_include_dir = /dir/incl/"
       </P
><P
>&#13;        Se o valor dessa diretiva estiver vazio, nenhum arquivo com
        <TT
CLASS="literal"
>UID</TT
>/<TT
CLASS="literal"
>GID</TT
> diferente pode ser incluído
        no PHP 4.2.3 e a partir do PHP 4.3.3. Em versões anteriores, todos os
        arquivos podiam ser incluídos.
       </P
></DD
><DT
><A
NAME="ini.safe-mode-exec-dir"
></A
><CODE
CLASS="parameter"
>safe_mode_exec_dir</CODE
>
       <A
HREF="language.types.string.html"
><B
CLASS="type"
>string</B
></A
></DT
><DD
><P
>&#13;        Se o PHP for usado no modo seguro, <A
HREF="function.system.html"
><B
CLASS="function"
>system()</B
></A
> e as outras
        <A
HREF="ref.exec.html"
>funções que executam programas do sistema</A
>
        se recusam a executar programas que não estão no diretório atual.
        Você deve usar <TT
CLASS="literal"
>/</TT
> como separador diretório em todos
        os ambientes, inclusive o Windows.
       </P
></DD
><DT
><A
NAME="ini.safe-mode-allowed-env-vars"
></A
><CODE
CLASS="parameter"
>safe_mode_allowed_env_vars</CODE
>
       <A
HREF="language.types.string.html"
><B
CLASS="type"
>string</B
></A
></DT
><DD
><P
>&#13;        Editar certas variáveis de ambientes pode ser uma falha de segurança em potencial.
        Essa diretiva contem uma lista de prefixos delimitados por vírgulas. No modo seguro,
        o usuário só pode alterar as variáveis de ambiente cujo nome começa com um dos
        prefixos dessa lista. Por padrão, os usuários só poderão ser capazser de editar
        variáveis de ambiente que começão com PHP_ (ex.: PHP_FOO=BAR).
       </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
         Se essa diretiva estiver vazia, o PHP deixará o usuário modificar QUALQUER
         variável de ambiente!
        </P
></BLOCKQUOTE
></DIV
></DD
><DT
><A
NAME="ini.safe-mode-protected-env-vars"
></A
><CODE
CLASS="parameter"
>safe_mode_protected_env_vars</CODE
>
       <A
HREF="language.types.string.html"
><B
CLASS="type"
>string</B
></A
></DT
><DD
><P
>&#13;        Essa diretiva contem uma lista delimitada por vírgulas de varáveis
        de ambiente que o usuário final não será capaz de mudar usando
        <A
HREF="function.putenv.html"
><B
CLASS="function"
>putenv()</B
></A
>. Essas variáveis serão protegidas mesmo que
        safe_mode_allowed_env_vars esteja configurada para permitir que elas sejam mudadas.
       </P
></DD
><DT
><A
NAME="ini.open-basedir"
></A
><CODE
CLASS="parameter"
>open_basedir</CODE
>
       <A
HREF="language.types.string.html"
><B
CLASS="type"
>string</B
></A
></DT
><DD
><P
>&#13;        Limita os arquivos que podem ser abertos ao diretório especificado
        e seus subdiretórios, incluindo o arquivo em si. Essa diretiva
        <SPAN
CLASS="emphasis"
><I
CLASS="emphasis"
>NÃO</I
></SPAN
> é afetada pelo estado do modo seguro,
        seja este ligado ou desligado.
       </P
><P
>&#13;        Quando um script tenta abrir um arquivo com, por exemplo,
        <A
HREF="function.fopen.html"
><B
CLASS="function"
>fopen()</B
></A
> ou <A
HREF="function.gzopen.html"
><B
CLASS="function"
>gzopen()</B
></A
>,
        a localização do arquivo é checada. Quando o arquivo está fora do
        diretório especificado, o PHP se recusará a abrí-lo. Todos os links
        simbólicos também passam pelo teste, não sendo possível evitar essa restrição
        com um symlink.
       </P
><P
>&#13;        O valor especial <SPAN
CLASS="systemitem"
>.</SPAN
>
        indica que o diretório de trabalho, onde o script é rodado, será usado como o
        diretório base. Isso é, no entanto, um pouco perigoso, já que o diretório de trabalho
        do script pode ser facilmente alterado com a função <A
HREF="function.chdir.html"
><B
CLASS="function"
>chdir()</B
></A
>.
       </P
><P
>&#13;        In <TT
CLASS="filename"
>httpd.conf</TT
>, open_basedir can be turned off
        (e.g. for some virtual hosts)
        <A
HREF="configuration.changes.html#configuration.changes.apache"
>the same way</A
> as
        any other configuration directive with "php_admin_value open_basedir
        none".
       </P
><P
>&#13;        No Windows, separe os diretórios com ponto-e-vírgula. Em todos os
        outros sistemas, separe os diretórios com dois pontos. Como módulo
        do Apache, caminhos do open_basedir dos diretórios pais são
        herdados automaticamente agora.
       </P
><P
>&#13;         A restrição especificada com open_basedir é na verdade um
         prefixo, não um nome de diretório. Isso significa que "open_basedir =
         /dir/incl" também permite acesso à "/dir/include" e
         "/dir/incls" se eles existirem. Quando você quiser restringir o acesso
         para apenas o diretório especificado, termine com uma barrra. Por exemplo:
         "open_basedir = /dir/incl/"
       </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Nota: </B
>
         Suporte para diretórios múltiplos foi adicionado na versão 3.0.7.
        </P
></BLOCKQUOTE
></DIV
><P
>&#13;        O padrão é permitir que todos os arquivos sejam abertos.
       </P
></DD
><DT
><A
NAME="ini.disable-functions"
></A
><CODE
CLASS="parameter"
>disable_functions</CODE
>
       <A
HREF="language.types.string.html"
><B
CLASS="type"
>string</B
></A
></DT
><DD
><P
>&#13;        A diretiva permite que você desabilite certas funções por
        razões de <A
HREF="security.html"
>segurança</A
>. Ela recebe
        uma lista de nomes de funções separadas por vírgula. disable_functions
        não é afetada pela diretiva <A
HREF="features.safe-mode.html#ini.safe-mode"
>Safe Mode</A
>.
       </P
><P
>&#13;        Essa diretiva deve ser configurada no <TT
CLASS="filename"
>php.ini</TT
> Você não pode,
        por exemplo, configurá-la no <TT
CLASS="filename"
>httpd.conf</TT
>.
       </P
></DD
><DT
><A
NAME="ini.disable-classes"
></A
><CODE
CLASS="parameter"
>disable_classes</CODE
>
       <A
HREF="language.types.string.html"
><B
CLASS="type"
>string</B
></A
></DT
><DD
><P
>&#13;        Essa diretiva permite que você desabilite certas classes por
        razões de <A
HREF="security.html"
>segurança</A
>. Ela recebe
        uma lista de nomes de funções separadas por vírgula. disable_functions
        não é afetada pela diretiva <A
HREF="features.safe-mode.html#ini.safe-mode"
>Safe Mode</A
>.
       </P
><P
>&#13;        Essa diretiva deve ser configurada no <TT
CLASS="filename"
>php.ini</TT
> Você não pode,
        por exemplo, configurá-la no <TT
CLASS="filename"
>httpd.conf</TT
>.
       </P
><DIV
CLASS="note"
><BLOCKQUOTE
CLASS="note"
><P
><B
>Availability note: </B
>
         Essa diretiva está disponível na versão 4.3.2 ou superior.
        </P
></BLOCKQUOTE
></DIV
></DD
></DL
></DIV
>
   </P
><P
>&#13;    Veja também: <A
HREF="ini.core.html#ini.register-globals"
>register_globals</A
>,
    <A
HREF="ref.errorfunc.html#ini.display-errors"
>display_errors</A
>, e
    <A
HREF="ref.errorfunc.html#ini.log-errors"
>log_errors</A
>
   </P
><P
>&#13;   Quando o <A
HREF="features.safe-mode.html#ini.safe-mode"
>safe_mode</A
> está ligado, o PHP checa
   se o proprietário do script atual bate com o proprietário do arquivo a ser
   operado por uma função de arquivo. Por exemplo:
   <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="ls"
>-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 script.php
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd</PRE
></TD
></TR
></TABLE
>
   Executando esse script.php
   <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /> readfile</font><font color="#007700">(</font><font color="#DD0000">'/etc/passwd'</font><font color="#007700">);<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
>
   resulta nesse erro quando o modo seguro estiver habilitado:
   <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2</PRE
></TD
></TR
></TABLE
>
  </P
><P
>&#13;   No entando, em certos ambientes uma checagem rígida de <TT
CLASS="literal"
>UID</TT
>
   não é apropriada e uma checagem mais leve de <TT
CLASS="literal"
>GID</TT
> é
   suficiente. Isso é suportado através da diretiva <A
HREF="features.safe-mode.html#ini.safe-mode-gid"
>safe_mode_gid</A
>. Atribuindo a ela o valor
   <TT
CLASS="literal"
>On</TT
> faz a checagem de <TT
CLASS="literal"
>GID</TT
>, mais leve e
   atribuindo a ela o valor <TT
CLASS="literal"
>Off</TT
> (o padrão) faz a
   checagem <TT
CLASS="literal"
>UID</TT
>.
  </P
><P
>&#13;   Se, ao invés de <A
HREF="features.safe-mode.html#ini.safe-mode"
>safe_mode</A
>, você editou um
   diretório em <A
HREF="features.safe-mode.html#ini.open-basedir"
>open_basedir</A
>, então todas
   as operações de arquivos serão limitadas a arquivos no diretório especificado e
   seus subdiretórios. Por exemplo (<TT
CLASS="filename"
>httpd.conf</TT
> do Apache de exemplo):
   <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="ini"
>&#60;Directory /docroot&#62;
  php_admin_value open_basedir /docroot
&#60;/Directory&#62;</PRE
></TD
></TR
></TABLE
>
   Se você rodar o mesmo script.php com essa
   configuração de <A
HREF="features.safe-mode.html#ini.open-basedir"
>open_basedir</A
>
   então esse será o resultado:
   <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>Warning: open_basedir restriction in effect. File is in wrong directory in
/docroot/script.php on line 2</PRE
></TD
></TR
></TABLE
>
  </P
><P
>&#13;   Você também pode desabilitar funções individuais. Perceba que a diretiva
   <A
HREF="features.safe-mode.html#ini.disable-functions"
>disable_functions</A
>
   não pode ser usada fora do arquivo <TT
CLASS="filename"
>php.ini</TT
> file o que significa que
   você não pode desabilitar funções em um virtualhost ou diretório específico
   no seu arquivo <TT
CLASS="filename"
>httpd.conf</TT
>
   Se nós acrescentarmos isso ao nosso arquivo <TT
CLASS="filename"
>php.ini</TT
>:
   <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="ini"
>disable_functions readfile,system</PRE
></TD
></TR
></TABLE
>
   Então teriamos essa saída:
   <TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="screen"
>Warning: readfile() has been disabled for security reasons in
/docroot/script.php on line 2</PRE
></TD
></TR
></TABLE
>
    </P
><DIV
CLASS="warning"
><P
></P
><TABLE
CLASS="warning"
BORDER="1"
WIDTH="100%"
><TR
><TD
ALIGN="CENTER"
><B
>Atenção</B
></TD
></TR
><TR
><TD
ALIGN="LEFT"
><P
>&#13;        Essas restrições do PHP não são validas em binários executados, é claro.
      </P
></TD
></TR
></TABLE
></DIV
></DIV
></DIV
><DIV
CLASS="NAVFOOTER"
><HR
ALIGN="LEFT"
WIDTH="100%"><TABLE
SUMMARY="Footer navigation table"
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
><A
HREF="features.persistent-connections.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="index.html"
ACCESSKEY="H"
>Principal</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
><A
HREF="features.safe-mode.functions.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Conexão Permanente com o Banco de Dados</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="features.html"
ACCESSKEY="U"
>Acima</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Funções restringidas/desabilitadas pelo modo seguro</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>