<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <HTML ><HEAD ><TITLE >Dados Enviados pelo Usuário</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="Usando a diretiva Register Globals" HREF="security.globals.html"><LINK REL="NEXT" TITLE="Magic Quotes" HREF="security.magicquotes.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.globals.html" ACCESSKEY="P" >Anterior</A ></TD ><TD WIDTH="80%" ALIGN="center" VALIGN="bottom" ></TD ><TD WIDTH="10%" ALIGN="right" VALIGN="bottom" ><A HREF="security.magicquotes.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ></TABLE ><HR ALIGN="LEFT" WIDTH="100%"></DIV ><DIV CLASS="chapter" ><H1 ><A NAME="security.variables" >Capítulo 30. Dados Enviados pelo Usuário</A ></H1 ><P > A maior fraqueza na maioria dos programas PHP não é inerente a linguagem em si, mas meramente um problema de código escrito desconsiderando segurança. Por essa razão, você sempre deve investir um pouco de tempo considerando as implicações de um certo pedaço de código, para ter certeza que o dano possÃvel se uma variável não esperada for submetida ao mesmo. <TABLE WIDTH="100%" BORDER="0" CELLPADDING="0" CELLSPACING="0" CLASS="EXAMPLE" ><TR ><TD ><DIV CLASS="example" ><A NAME="AEN6624" ></A ><P ><B >Exemplo 30-1. Uso Perigoso de Variáveis</B ></P ><TABLE BORDER="0" BGCOLOR="#E0E0E0" CELLPADDING="5" ><TR ><TD ><code><font color="#000000"> <font color="#0000BB"><?php<br /></font><font color="#FF8000">// remove um arquivo do diretório home do usuário... ou talvez<br />// de outra pessoa?<br /></font><font color="#0000BB">unlink </font><font color="#007700">(</font><font color="#0000BB">$evil_var</font><font color="#007700">);<br /><br /></font><font color="#FF8000">// Escreve registro do acesso... ou talvez uma entrada em /etc/passwd?<br /></font><font color="#0000BB">fwrite </font><font color="#007700">(</font><font color="#0000BB">$fp</font><font color="#007700">, </font><font color="#0000BB">$evil_var</font><font color="#007700">);<br /><br /></font><font color="#FF8000">// Executa algo trivial... ou rm -rf *?<br /></font><font color="#0000BB">system </font><font color="#007700">(</font><font color="#0000BB">$evil_var</font><font color="#007700">);<br /></font><font color="#0000BB">exec </font><font color="#007700">(</font><font color="#0000BB">$evil_var</font><font color="#007700">);<br /><br /></font><font color="#0000BB">?></font> </font> </code></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE > Você sempre deve examinar cuidadosamente seu código para se assegurar que quaisquer variáveis sendo enviadas do navegador web estão sendo checadas de maneira correta, e faz a si mesmo as seguintes perguntas: <P ></P ><UL ><LI ><P > Seu script só afetará os arquivos desejados? </P ></LI ><LI ><P > Dados incomuns ou indesejados podem ser utilizados? </P ></LI ><LI ><P > Esse script pode ser usado de maneiras não intencionadas? </P ></LI ><LI ><P > Ele pode ser usado in conjunto com outros scripts de maneira negativa? </P ></LI ><LI ><P > As transações serão registradas adequadamente? </P ></LI ></UL > Respondendo essas perguntas adequadamente enquanto escrevendo o script, ao invés de depois, previne a re-escrita indesejada quando você precisar aumentar a segurança. Começando com essa linha de raciocÃnio, você não garante a segurança do seu sistema, mas pode ajudar a aumentá-la. </P ><P > Você também pode considerar desligar as diretivas register_globals, magic_quotes, ou outras configurações convenientes que pode confundir você em relação a validade, origem, ou valor de uma variável qualquer. Trabalhar com PHP em modo error_reporting(E_ALL) também pode ajudar avisando sobre variáveis sendo usadas antes de serem checadas ou inicializadas (então você pode previnir que dados incomuns sejam operados). </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.globals.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.magicquotes.html" ACCESSKEY="N" >Próxima</A ></TD ></TR ><TR ><TD WIDTH="33%" ALIGN="left" VALIGN="top" >Usando a diretiva Register Globals</TD ><TD WIDTH="34%" ALIGN="center" VALIGN="top" ><A HREF="security.html" ACCESSKEY="U" >Acima</A ></TD ><TD WIDTH="33%" ALIGN="right" VALIGN="top" >Magic Quotes</TD ></TR ></TABLE ></DIV ></BODY ></HTML >