Sophie

Sophie

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

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
>Relatando Erros</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="Segurança"
HREF="security.html"><LINK
REL="PREVIOUS"
TITLE="Injeção de SQL"
HREF="security.database.sql-injection.html"><LINK
REL="NEXT"
TITLE="Usando a diretiva Register Globals"
HREF="security.globals.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="security.database.sql-injection.html"
ACCESSKEY="P"
>Anterior</A
></TD
><TD
WIDTH="80%"
ALIGN="center"
VALIGN="bottom"
></TD
><TD
WIDTH="10%"
ALIGN="right"
VALIGN="bottom"
><A
HREF="security.globals.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
></TABLE
><HR
ALIGN="LEFT"
WIDTH="100%"></DIV
><DIV
CLASS="chapter"
><H1
><A
NAME="security.errors"
>Capítulo 28. Relatando Erros</A
></H1
><P
>&#13;    Com relação a segurança, relatório de erros é uma faca de dois gumes.
    Pode beneficiar o aumento da segurança, ou fornecer informaçao ao atacante.
   </P
><P
>&#13;    Uma tática padrão de ataque involve determinar como um sistema funciona entrando
    dados incorretos e checando os tipos e contextos dos erros
    que são retornados. Isso permite que um cracker sonde
    por informações sobre o servidor, para determinar possíveis fraquezas.
    Por exemplo, se um atacantes tinha recolhido informação sobre uma página
    baseado em uma submissão de dados anterior, ele pode tentar sobrescrever
    variáveis, ou modificá-las:
    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN6556"
></A
><P
><B
>Exemplo 28-1. Atacando variáveis com uma página HTML personalizada</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="html"
>&#60;form method="post" action="attacktarget?username=badfoo&#38;amp;password=badfoo"&#62;
&#60;input type="hidden" name="username" value="badfoo" /&#62;
&#60;input type="hidden" name="password" value="badfoo" /&#62;
&#60;/form&#62;</PRE
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
><P
>&#13;    Os erros do PHP que são retornados normalmente podem ser úteis para
    um desenvolvedor que está tentando depurar um script, indicando coisas
    como a função ou arquivo que falhou, o arquivo PHP no qual a falha ocorreu,
    e o número da linha de código causadora da falha. Toda essa informação
    pode ser explorada. Não é incomum para um desenvolvedor PHP
    usar <A
HREF="function.show-source.html"
><B
CLASS="function"
>show_source()</B
></A
>,
    <A
HREF="function.highlight-string.html"
><B
CLASS="function"
>highlight_string()</B
></A
>, ou
    <A
HREF="function.highlight-file.html"
><B
CLASS="function"
>highlight_file()</B
></A
> como medidas de depuração, mas
    em um site de produção, isso pode expor variáveis ocultas, sintaxe incorreta,
    ou outra informações perigosas. Especialmente perigoso é rodar
    código de fontes conhecidas com tratadores de depuração integrados, ou usar
    técnicas de depuração comuns. Se o atacante pode determinar qual
    técnica gerá você estiver usando, eles podem tentar, por força-bruta,
    enviar várias strings de depuração comuns para a página:
    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN6563"
></A
><P
><B
>Exemplo 28-2. Explorando variáveis comuns de depuração</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><PRE
CLASS="html"
>&#60;form method="post" action="attacktarget?errors=Y&#38;amp;showerrors=1&#38;amp;debug=1"&#62;
&#60;input type="hidden" name="errors" value="Y" /&#62;
&#60;input type="hidden" name="showerrors" value="1" /&#62;
&#60;input type="hidden" name="debug" value="1" /&#62;
&#60;/form&#62;</PRE
></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
><P
>&#13;    Independente do método de tratamento de erros, a habilidade de sondar um
    sistema por erros acaba dando informações úteis
    a um atacante.
   </P
><P
>&#13;    Por exemplo, o próprio estilo de um erro genérico do PHP indica que o sistema
    está rodando o PHP. Se o atacante estava procurando por uma página .html, e
    queria sondar qual o back-end (para procurar fraquezas conhecidas no
    sistema) enviando dados incorretos, ele pode ser capaz de
    determinar que um sistema foi feito com PHP.
   </P
><P
>&#13;    Uma função de erro pode indicar se o sistema pode está executando um
    engine de banco de dados específico, ou dar dicas de como uma página foi
    programada ou desenhada. Isso permite uma investigação profunda sobre
    portas abertas de bancos de dados, ou procurar por bugs específicos ou fraquezas
    de uma página. Enviando diferentes pedaços de dados ruins, por exemplo,
    um atacante pode determinar a ordem de autenticação em um script,
    (a partir da linha do erro) assim como sondar por exploits que
    podem ser aproveitados em diferentes partes do script.
   </P
><P
>&#13;    Um erro geral do PHP ou do sistema de arquivos indicam quais permissões
    o servidor web tem, assim como a estrutura e organização dos
    arquivos no servidor web. Códigos de erros escritos pelo desenvolvedor podem
    agravar o problema, levando pela exploração fácil de informação até então
    "escondida".
   </P
><P
>&#13;    Existem três soluções principais para esse problema. A primeira é
    verificar exaustivamente todas as funções, e tentar compensar pelo volume dos
    erros. A segunda é desabilitar completamente os relatórios de erros
    no código de produção. A terceira é usar as funções personalizávies
    de tratamento de erro do PHP para criar seu próprio tratador de erro.
    Dependendo da sua política de segurança, você pode perceber que todas são
    aplicáveis à sua situação.
   </P
><P
>&#13;    Uma maneira de perceber esse problema antes que o pior aconteça é usar
    a diretiva <A
HREF="function.error-reporting.html"
><B
CLASS="function"
>error_reporting()</B
></A
>, para ajudar a
    aumentar a segurança de seu código e achar uso de variáveis que pode ser perigoso.
    Ao testar o seu código, antes de colocar em produção, com E_ALL, você pode
    rapidamente encontrar áreas onde suas variáveis podem sofrer alterações nocivas
    ou modificações quaisquer. Uma vez que estiver pronto para produção,
    você deve ou desabilitar mensagens de erro completamente configurando a diretiva

    <A
HREF="function.error-reporting.html"
><B
CLASS="function"
>error_reporting()</B
></A
> com o valor 0, ou desligar o envio
    de erros usando a opção <TT
CLASS="literal"
>display_errors</TT
> do arquivo <TT
CLASS="filename"
>php.ini</TT
>,
    para evitar sondagem do seu código. Se você escolher a segunda opção,
    você deve também definir o caminho para o arquivo de registro usando a
    diretiva <TT
CLASS="literal"
>error_log</TT
>, e ligar a diretiva
    <TT
CLASS="literal"
>log_errors</TT
>.
    <TABLE
WIDTH="100%"
BORDER="0"
CELLPADDING="0"
CELLSPACING="0"
CLASS="EXAMPLE"
><TR
><TD
><DIV
CLASS="example"
><A
NAME="AEN6578"
></A
><P
><B
>Exemplo 28-3. Encontrado variáveis perigosas com E_ALL</B
></P
><TABLE
BORDER="0"
BGCOLOR="#E0E0E0"
CELLPADDING="5"
><TR
><TD
><code><font color="#000000">
<font color="#0000BB">&lt;?php<br /></font><font color="#007700">if (</font><font color="#0000BB">$username</font><font color="#007700">) {&nbsp;&nbsp;</font><font color="#FF8000">// Not initialized or checked before usage<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">$good_login </font><font color="#007700">= </font><font color="#0000BB">1</font><font color="#007700">;<br />}<br />if (</font><font color="#0000BB">$good_login </font><font color="#007700">== </font><font color="#0000BB">1</font><font color="#007700">) { </font><font color="#FF8000">// If above test fails, not initialized or checked before usage<br />&nbsp;&nbsp;&nbsp;&nbsp;</font><font color="#0000BB">readfile </font><font color="#007700">(</font><font color="#DD0000">"/highly/sensitive/data/index.html"</font><font color="#007700">);<br />}<br /></font><font color="#0000BB">?&gt;</font>
</font>
</code></TD
></TR
></TABLE
></DIV
></TD
></TR
></TABLE
>
   </P
></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="security.database.sql-injection.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="security.globals.html"
ACCESSKEY="N"
>Próxima</A
></TD
></TR
><TR
><TD
WIDTH="33%"
ALIGN="left"
VALIGN="top"
>Injeção de SQL</TD
><TD
WIDTH="34%"
ALIGN="center"
VALIGN="top"
><A
HREF="security.html"
ACCESSKEY="U"
>Acima</A
></TD
><TD
WIDTH="33%"
ALIGN="right"
VALIGN="top"
>Usando a diretiva Register Globals</TD
></TR
></TABLE
></DIV
></BODY
></HTML
>