| Monitorando erros em sites PHP via RSS |
|
|
| Por Antonio Jozzolino | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 20 de dezembro de 2006 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Quando lançamos um site, pensamos: missão cumprida. “Próximo!!!” Mas não é bem assim. Apesar dos testes, é somente quando ele estiver funcionando que alguns erros imprevistos aparecerão. Como monitorar estes erros? Usei e-mail durante anos, mas não é uma boa, pois você tem que especificar no próprio código que tipo de erro quer ser notificado: $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die(mail(“meuemail @ meusite.com”, “Epa! Um erro ocorreu!”, mysql_error()); Ou, pior ainda: $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password') or die(echo mysql_error()); Isto seria entregar o ouro para o bandido. Erros devem ser escondidos. Não por uma questão de ego ou mesmo marketing pessoal, mas sim para proteger seu site de invasores e pessoas mal intencionadas. Lembre-se: quanto menos informação seu inimigo tiver, melhor. Por outro lado, você precisa saber as falhas do seu site para poder corrigi-las. Bem melhor do que receber um telefonema do seu cliente reclamando... Foi pensando nisso que escrevi essa classe bem simples, mas que quebra um galhão e te mantém informado, de maneira organizada, do que está rolando no seu site. Depois de instalada, você receberá feeds dos erros, avisos e notificações do seu site, como a tela capturada abaixo, usando o Google Reader. Como você pode ver, a classe reproduz a notificação e mostra a linha que apresentou problemas. Além disso, se você clicar no título do erro, ele abrirá o arquivo na sua cópia local do site para edição. Isso funcionou bem com o Sage, a extensão do Firefox. Mas não com leitores on line, como o Google Reader ou o Bloglines, pois eles alteram o código. Isto está na lista de melhorias para próxima versão. J Agora, olhe só isso: É aqui que mora o perigo. Veja que nosso amiguinho tentou injetar um código externo, aproveitando-se de uma vulnerabilidade do Mambo. É um bug que permite um ataque de Code Injection: a variável $spb não está sendo tratada. E você nunca saberia disso, a menos que olhasse o arquivo de log do PHP. Preparando o sistemaAntes de tudo, você vai precisar alterar algumas coisinhas no php.ini. Isto significa que você tem que ter ou um servidor próprio ou um host que lhe permita acesso via shell. Felizmente, a Dreamhost permite isso. Se você tem conta na Dreamhost ou pretende ter, aqui estão as instruções para você configurar seu próprio php.ini. Basicamente, você precisará editar o seguinte no seu php.ini.: error_reporting = E_ALL display_errors = off log_errors = On error_log = "/home/user/domain/.logs/.error_log" Coloque o arquivo de erro em um local que não tem acesso externo, por segurança. Não coloque no mesmo diretório do seu site. Comece o arquivo com um “.”, para ele ficar oculto. Todo cuidado é pouco. É importante definir um local fixo para o arquivo de log. Gozado que eu não achei nenhuma referência sobre isto no manual do PHP. Se você não discrimina o caminho do arquivo, ele vai espalhar arquivos de log por todos os diretórios do seu site! Feito isto, baixe o arquivo da classe. Centralizei lá no phpclasses.org para facilitar a manutenção do software. A instalação é super simples, mas se você tiver problemas, dê uma olhadinha na documentação da classe. Descompacte o arquivo em um diretório da sua escolha. Depois crie um arquivo com um nome “secreto”, não obvio, e coloque as seguintes linhas: Arquivo nadahaver.phpinclude_once('RSSerror.php'); $args = array( "root" => "/home/.gizelle/aajj/sgd.com.br/", "local" => "file:///C:/Documents%20and%20Settings/SeuNome/My%20Documents/SeuSite/", "log" => "/home/user/domain/.logs/.error_log", "url" => "http://www.seusite.com.br/", "lines" => 5, "password" => "123456" ); $param = array( "encoding" => "UTF-8", "language" => "pt-BR", "title" => "Error Report for www.seusite.com.br", "description" => "Please corrects some errors occurred in the site www.seusite.com.br", "stylesheet" => "http://www.seusite.com.br/class_RSSerror/rsserror.css", "stylesheet" => "", "link" => "http://www.seusite.com.br/" ); $rss = new RRSerror($args, $param); Para ver o resultado, no seu agregador, adicione o FEED: http://www.seusite.com.br/nadahaver.php?p=123456 SegurançaPesquisei sobre segurança em feeds e o que existe é agregadores que suportam autenticação via servidor, como a do apache. Google Reader e Bloglines não aceitam. Mesmo que aceitassem, a segurança seria praticamente a mesma desta que eu implementei. Afinal, os dados iam trafegar abertos na rede. Se alguém estiver sniffando sua conexão, pegaria tanto de uma forma quanto da outra. Por isso, a melhor política é:
E, claro, desabilitar algumas coisas no seu php.ini expose_php = Off safe_mode = On disable_functions = exec,passthru,shell_exec,system,escapeshellarg,escapeshellcmd Há, entretanto, uma alternativa boa que pretendo implementar futuramente, que é criptografar o próprio conteúdo do Feed. Mas esta solução requer obrigatoriamente o Firefox e o Greasemonkey. ` Mas isto não é exatamente um problema, não é? J Ah, é importante que suas páginas não tenham o comando init_set(“display_errors”, 0), senão os arquivos de log não serão gerados. Este script é novo e pode haver bugs. Se você encontrar algum, avise. Estou usando há um 1 mês em dois sites e até agora tudo bem. Para comentar bugs, deixe um comentário. Update [03/01/2006 08:32:00] Fiquei bastante contente ao saber que esta classe foi indicada para ganhar o Prêmio de Inovação de dezembro, do site www.phpclasses.org.
Se for escolhida, ótimo. Será um incentivo a mais para melhorar a idéia. Mas só o fato de ser indicada, já é uma honra e satisfação enorme. Conheça as classes que estão concorrendo no site www.phpclasses.org. Update [02/02/2007 11:28:00] Medalha de prata! Uhhuhh, esquindô, ueueueue!!! Fiquei em segundo lugar junto a classe Session in Cookies. Legal, é um grande incentivo! Obrigado a todos que votaram na minha classe, espero que seja útil. E parabéns ao vencedor, o Khaled Al-Shamaa com sua classe ArDate, e a todos que participaram também! Achei muito divertido! Adora dá licença que preciso contar para minha mãe. Ops! Será que foi ela que votou? Visto: 9739
Escrever comentário
Powered by AkoComment Tweaked Special Edition v.1.4.6 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Última Atualização ( 29 de julho de 2007 ) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| < Anterior | Próximo > |
|---|
| Imagens |
|---|
| Últimos comentários | ||||||||
|---|---|---|---|---|---|---|---|---|
|
| Ítens relacionados |
|---|
| Fique informado |
|---|
|
|