Vulnerabilidade na classe PHPMailer inferior a 5.2.18

Vulnerabilidade no PHPMailer

Imagem Ilustrativa

PHPMailer, uma das classes mais usadas para enviar e-mails a partir do PHP, tem uma vulnerabilidade séria em suas versões inferiores a 5.2.18. O pesquisador de segurança [Dawid Golunski] acaba de publicar, afirmando que o PHPMailer sofre de uma falha crítica que pode levar um invasor a conseguir a execução remota de código.

PHPMailer é usado por vários projetos open-source, entre eles são: WordPress, Drupal, 1CRM, SugarCRM, Yii e Joomla.

Uma correção já foi publicada pelo PHPMailer e todos os usuários devem atualizar suas programações.

Para desencadear esta vulnerabilidade (CVE-2016-10033), parece que o atacante só tem que fazer o aplicativo web enviar um e-mail usando a classe vulnerável PHPMailer. Dependendo do aplicativo em si, isso pode ser realizado de diferentes maneiras, como formulários de contato / feedback, formulários de registro, resets de e-mail de senha e assim por diante.

Após uma rápida análise diff, descobrimos que o código vulnerável parece estar nas seguintes linhas do class.phpmailer.php:

Versão 5.2.17

 

Version 5.2.18

 

A partir do código acima, podemos ter uma idéia de onde o bug vem. O pesquisador Dawid Golunski afirma ter desenvolvido uma exploração de Execução Remota de Código (RCE) e que a publicará numa data posterior, para dar aos usuários tempo para atualizar seus sistemas.

Então … programadores, o que você está esperando? Vá e atualize.

Publicado em: news, security hacks

Desvendando os certificados SSL grátis

desvendando ssl grátis

Certificados SSL grátis | Imagem Ilustrativa – Fonte Freepik

Podemos dizer que a popularização dos certificados SSL no tráfego de informações de qualquer site na internet é uma das notícias mais importantes que tivemos este ano. Não por menos, afinal ela veio em um momento onde recebemos notícias diárias sobre vazamentos de informações sigilosas, dados pessoais, grandes invasões. Resumindo, com nossas vidas cada dia mais passando por meios digitais a segurança de dados se tornou importante demais para ser utilizada por apenas poucos.

Mas porque tivemos este ano como um marco para esta popularização da segurança da internet? Simples. Graças ao lançamento oficial da autoridade Certificadora Let’s Encrypt™ feito neste ano, agora qualquer site, loja virtual, blog ou portal de informações pode desfrutar da segurança do cadeado verde que acompanha o campo de URL em nosso navegador, sem pagar nada por isto. A autoridade que é desenvolvida e mantida pela Linux Foundation fornece certificados SSL de forma gratuita e automatizada.

Além disto, sua api de integração fácil permitiu o desenvolvimento de interfaces para sua aplicação em empresas de hospedagem. Nossas as hospedagens compartilhadas e hospedagem cloud, por exemplo, já possuem esta integração e renovação completamente atualizadas utilizando a certificação Let’s Encrypt™.

Correndo atrás desta tendência, a autoridade certificadora Comodo, em conjunto com o CPanel, também começou a disponibilizar uma versão de seu SSL gratuitamente. Ela se dá pela ferramenta AutoSSL implementada pelo CPanel em sua distribuição 58.

O que está por traz de tanta segurança e de forma gratuita?

No caso da Let’s Encrypt™, as regras de segurança são desenvolvidas e mantidas pelo ISRG (Internet Security Research Group. Ou Grupo de pesquisa em segurança da internet, em português) na califórnia. O projeto faz parte do Linux foundation Collaborative Projects. Dado isto podemos confirmar um bom ar de confiança ao projeto.

A Let’s Encrypt™ foi responsável por implementar um novo protocolo chamado ACME. Este protocolo tem o intuito de tornar mais simples a obtenção e a configuração de certificados SSL. Apesar de sua implementação ser mais simples, isto não prejudica a segurança. Os certificados emitidos baseiam-se nas melhores práticas de segurança TLS. Além disto, eles possuem chaves de criptografia de até 4096bits.

O funcionamento por traz da validação de um domínio

O sistema Let’s Encrypt™ valida um domínio através de um processo de “challenges” (desafios) onde o servidor que controla determinado domínio precisa comprovar o controle do domínio que deseja ativar o certificado.

Funciona assim, o servidor proprietário do domínio perguntará ao Let’s Encrypt™ o que é preciso fazer para provar o controle de um determinado domínio. A entidade então irá retornar algumas opções de validação, como por exemplo, através de um registro de DNS ou através de uma URI.

Durante o processo a Let’s Encrypt™ CA irá disponibilizar um código único que deverá ser assinado, com o par de chaves privadas, pelo agente validador e assim, provar que ele controla as chaves privadas.

Assim que concluído este passo, deve ser criado um arquivo no caminho especificado no site em questão. O agente validador deve assinar o código com sua chave privada. Finalizadas estas questões o Let’s Encrypt™ poderá checar o arquivo que foi colocado no servidor web para ter a garantia da validade deste domínio. Se a validade é garantida seu certificado será ativado e poderá ser visto através do navegador.

Validando certificado

Processo de validação do certificado SSL Let’s Encrypt

Certificado SSL automatizado

A parte boa nisto tudo é que o sistema do Let’s Encrypt é totalmente automatizado e aberto. Assim, já é possível encontrar serviços que disponibilizam a instalação dos certificados sem que seja necessário realizar todo o processo de validação da forma mais dolorosa. É o caso, por exemplo, da nossa plataforma de gerenciamento de hospedagem. Através de uma interface simples é possível ativar e revogar certificados. E o processo de renovação é feito automaticamente após os 90 dias de validade do certificado.

Ativação de SSL Grátis pela DialHost

Ativação de SSL Grátis pela DialHost

A evolução do Mercado

O Let’s Encrypt trouxe uma perspectiva completamente nova para a segurança nas informações que circulam na internet. Agora não existe mais motivos para um site permanecer sem segurança SSL. Mesmo se seu site possuir apenas o bom e velho formulário de contatos e não tiver tanta informação sigilosa esta proteção extra deve ser levada em conta. Tanto deve, que ferramentas de busca , como o Google, já começam a utilizar o uso  do HTTPS como fator de ranqueamento em suas buscas.  Existe ainda uma proposta do navegador Chrome para começar a alertar sites que não utilizam certificados SSL, como sites não seguros.

“Atualmente, o Chrome indica conexões HTTP com um indicador neutro. Isso não reflete a verdadeira falta de segurança em conexões HTTP.” Diz Emily Schechter, membra da equipe de segurança do Chrome.

E como fica o mercado SSL atual?

É claro que este mercado terá forte mudança. Com a popularização dos certificados SSL grátis o que se espera é uma queda nas vendas dos certificados SSL mais simples. É claro que isto não implica na morte dos certificados SSL pagos. Afinal, eles proporcionam, além da segurança na informação, coberturas por seguros reais. E ainda existem categorias que validam a empresa como um todo e não somente o domínio. Este último, traz ainda mais credibilidade ao usuário. No caso de compras ou operações financeiras, o certificado garante a ele estar usando o site real da empresa desejada.

E vocês o que esperam sobre os próximos passos da segurança na internet? Será que teremos ainda mais sistemas colaborativos neste intuito? Será que o mercado proprietário conseguirá trazer soluções ainda mais robustas para garantir sua privacidade?

 

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

Front in Bh chega à 5ª edição no próximo 6 de agosto

Front in BH - 06 de Agosto de 2016

Front in BH – 06 de Agosto de 2016

Em agosto teremos uma nova oportunidade de nos atualizarmos sobre o que tem de tendência no mercado de front-end. O Front in BH chega à sua 5ª edição trazendo um evento voltado para desenvolvedores web e mobile. E ele chega com intuito de ajudar na capacitação do profissionais mineiros.

A DialHost tem o prazer em apoiar esta ideia. Para nós estes eventos são fundamentais para o desenvolvimento da Internet no Brasil.

No dia 6 de agosto, a comunidade Front-end local irá se reunir na capital mineira para participar da quinta edição do Front in BH. Voltado para desenvolvedores web e mobile, o evento tem como foco trazer aos profissionais de Belo Horizonte e região, um circuito de palestras com o que tem de atual no mercado de desenvolvimento Front-end no Brasil e exterior. Em 2016, serão 8 palestrantes. E entre os nomes de peso, temos as atrações internacionais: Tadeu Zagallo, Max Fortman e Zeno Rocha.

Segundo Victor Arthur, co-fundador e organizador do evento, o Front in BH tem colaborado para promover a capacitação da comunidade de desenvolvedores e estimular novas iniciativas em Belo Horizonte. “O Front in BH foi crucial para a valorização do desenvolvedor front-end. Mostrou para o mercado a importância desse tipo de profissional dentro de uma empresa, bem como o seu papel estratégico em um negócio”, pondera. Além disso, o projeto também potencializou para que vários grupos se organizassem e, hoje, existem vários meetups – pequenas atividades e encontros de um determinado segmento muito conhecido em terras americanas – acontecendo em Belo Horizonte. “Esse tipo de ação tem se tornado muito comum por aqui. Acredito que, semanalmente, desenvolvedores têm se encontrado para debater algum assunto que esteja em alta no setor”, ressalta.

A inciativa é pioneira na abordagem de temas atuais e de interesse comum às áreas de desenvolvimento, design, métricas, entre outras. E, por isso, tem trazido bons resultados para o mercado mineiro, já que tem impactado na formação de profissionais mais críticos e capacitados para a criação de sites melhores e atualizados de acordo com as tendências que vêm sendo trabalhadas ao redor do mundo. Além disso, o Front in BH tem tido um papel de influenciador para que eventos desse porte aconteçam em outras regiões do país.

Desde a sua primeira edição, em 2011, o Front in BH contou com a participação de mais de 1.500 participantes e 37 palestrantes oriundos do Brasil e do exterior. Para 2016, a expectativa é que o público seja de 550 pessoas.

Front in BH

O evento surgiu da necessidade de fortalecer a comunidade Front-end local, por meio de um circuito de palestras focado em promover o relacionamento e a integração entre profissionais do setor e áreas afins. É voltado para os profissionais das áreas de tecnologia e comunicação digital, englobando empreendedores, gestores, desenvolvedores, designers, entusiastas e membros da comunidade.

Palestrantes

Zeno Rocha (Los Angeles, Eua) Developer Advocate na LifeRay
Tadeu Zagallo (Londres, Inglaterra), engenheiro de software no Facebook
Max Firtman (Buenos Aires, Argentina), web developer, palestrante e autor de livros
Willian Justen (Rio de Janeiro, Brasil), front-end engineer
Newton Calegari (São Paulo, Brasil), líder de projetos na W3c Brasil
Diego Ballona (Belo Horizonte, Brasil), community leader na Toptal
Igor Ribeiro (Belo Horizonte, Brasil), UI engineer na Avenue Code

Informações sobre o evento

Data: 6 de agosto
Local: Teatro Ney Soares (rua Diamantina, 463, Lagoinha)
Ingresso: R$ 140
Site:  http://frontinbh.com.br

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

count_chars – Tratamento de strings com PHP

count_chars - Tratamento de strings com PHP

Imagem ilustrativa

Estou de volta com o 4ª post sobre tratamento de strings, e para esta postagem estudei um pouco sobre o count_chars. A função basicamente faz a contagem das ocorrências dos caracteres de uma string. Assim, é possível avaliar quantas vezes um determinado caractere repete dentro desta string.

A função possui 4 modos de busca que são passados por parâmetros. Abaixo vou explicar um pouco de cada um destes modos.

count_chars na prática

Como a teoria desta função é relativamente simples não vamos nos prolongar e colocar a mão na massa com um exemplo bem simples usando este comando.

count_chars no modo 0

Ao utilizar a função no modo 0 – count_chars($text_print,0) – O comando retornará um array com os códigos ASCII de todos os caracteres ASCII em um array e mostrará a ocorrência de cada um deles, mesmo os que não tiveram ocorrência.

Abaixo fiz um teste com a frase “DialHost – Desenvolvendo um exemplo com count_chars”.

<?php 
    $text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
    $str_md0 = count_chars($text_print,0);
    echo '<h2> String de exemplo: '.$text_print.'</h2>';
    echo '<hr>';
    echo '<h2> Imprimindo todas as ocorrencias de todos os tipos de caracteres dentro da String:</h2>';
    echo '<p>'; 
    foreach ($str_md0 as $key=>$value){echo utf8_encode(chr($key)). ': ' . $value . ' vezes'.'<br>'; };
    echo '</p>';
?>

Defini a variável $text_print para colocar a frase que eu gostaria de analisar e então coloquei o resultado do count_chars dentro da variável $str_md0. Isto porque ele me retorna um array e eu terei que tratá-lo para ter a impressão correta das recorrências dos caracteres. Agora que já temos todos os caracteres dentro do array é só varrer este array e ir imprimindo os respectivos caracteres e suas ocorrências na string.

Neste código tive que usar o utf8_encode e o comando chr. O primeiro para mostrar os caracteres especiais de forma correta e o segundo para identificar o caractere referente ao código ASCII do array. Vale lembrar que o retorno deste comando é enorme já que ele retorna tanto os caracteres que foram utilizados quanto os que não foram. Confiram o resultado neste link.

Modo 1

O modo 1 – count_chars($text_print,1) – já possui um filtro sobre as ocorrências da string. Ele avalia a string e retorna um array de todos os caracteres ASCII que possuem pelo menos uma ocorrência. Isto evita a lista gigantesca de caracteres que não estão presentes na string passada. Abaixo está o mesmo exemplo que fiz no modo 0 só que agora utilizando o modo 1:

<?php 
    $text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
    $str_md1 = count_chars($text_print,1);
    echo '<h2> String de exemplo: '.$text_print.'</h2>';
    echo '<hr>';
    echo '<a name="mod1"><h2> Imprimindo todas as ocorrencias dos caracteres que existem na String:</h2></a>';
    echo '<p>'; 
    foreach ($str_md0 as $key=>$value){echo utf8_encode(chr($key)). ': ' . $value . ' vezes'.'<br>'; };
    echo '</p>';
?>

Em suma aqui está tudo igual ao item anterior, a diferença será no restultado que vocês podem conferir neste link

Modo 2

Se o modo 1 mostra todas os caracteres que possuíram pelo menos 1 ocorrência, o modo 2 faz exatamente o contrário. Ele avalia a string e retorna um array de todos os caracteres ASCII que não possuem ocorrências.

<?php 
    $text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
    $str_md1 = count_chars($text_print,2);
    echo '<h2> String de exemplo: '.$text_print.'</h2>';
    echo '<hr>';
    echo '<a name="mod2"><h2>Imprimindo todos os caracteres que não possuem ocorrências na String:</h2></a>';
    echo '<p>'; 
    foreach ($str_md0 as $key=>$value){echo utf8_encode(chr($key)). ': ' . $value . ' vezes'.'<br>'; };
    echo '</p>';
?>

Novamente, a diferença será no resultado que vocês podem conferir neste link

Modo 3

O modo 3 é mais simples que os demais. Ele apenas retornará todos os caracteres utilizados pela string. Desta vez porém, não retornará quantas vezes ele se repetiu. O retorno será uma simples string que no exemplo abaixo retornará isto: -DH_acdehilmnoprstuvx.

<?php 
$text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
echo '<a name="mod3"><h2> Imprimindo todos os caracteres utilizados na String:</h2></a>';
echo '<p>'.utf8_encode(count_chars($text_print,3)).'</p>';
?>

Para conferir o resultado deste exemplo basta clicar neste link.

Modo 4

Acho que todos já estão prevendo que este último modo não será nenhuma novidade… sim ele tem o efeito contrário do modo 3 exibindo apenas os caracteres não utilizados na string.

&lt;?php 
$text_print = 'DialHost - Desenvolvendo um exemplo com count_chars';
echo '&lt;a name="mod4"&gt;&lt;h2&gt; Imprimindo todos os caracteres não utilizados na String:&lt;/h2&gt;&lt;/a&gt;';
echo '&lt;p&gt;'.utf8_encode(count_chars($text_print,4)).'&lt;/p&gt;';
?&gt;

Para conferir o resultado deste exemplo basta clicar neste link.
Bem, espero que este comando tenha sido útil para vocês e nos vemos na próxima. Quem quiser se aprofundar sobre exemplos de uso deste comando o manual do PHP pode ser muito útil

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais.

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.

utf8_decode e utf8_encode tratando com codificação Unicode

utf8_decode e utf8_encode

Imagem ilustrativa para utf8_decode e utf8_encode

Olá pessoal, estou de volta para o terceiro post da série sobre tratamento de strings com PHP. Hoje falarei um pouco sobre os comandos utf8_decode e utf8_encode, trazendo uma melhor explicação para o uso feito no exemplo do post passado “strlen, desvendando os tamanhos de uma string”.

Só para lembrar, no post passado, utilizamos o comando utf8_decode para consertar a contagem de caracteres com acentuação. Sem a utilização deste comando, o strlen() acabava contando letras acentuadas como 2 caracteres. Mas, por que o comando utf8_decode()  resolve este problema? Que magia é essa?

Desvendando o utf8_decode

Como a segunda palavra já diz, o decode funciona para decodificar um determinado dado, passado como parâmetro, do formato utf8 para o ISO-8859-1. Sim, talvez o comando mais explicito seria utf-8_to_ISO-8859_decode(), mas acredito que isto seria muito grande para a função. Enfim, o fato é que o decode se limita à formatação ISO-8859-1, sendo assim se você não necessita utilizar este tipo de codificação já pode parar por aqui. Talvez este artigo não tenha nada a lhe acrescentar.

Dica: Se vocês está precisando fazer decodes com outros formatos você pode dar uma olhada no comando iconv().

Para todos os outros que desejam descobrir a razão do caractere acentuado retornar como 2 caracteres, a explicação é simples. O padrão utf-8 utiliza um padrão de valores entre 1 e 4 bytes, por caractere. Assim, quando temos caracteres do tipo á, é, í… os mesmos utilizam 2 bytes que são contados então, como 2 caracteres pela função strlen();

Dica: Se o texto a ser decodificado não estiver codificado em utf-8 o comando pode apresentar resultados indesejados.

O utf8_encode

O utf8_encode() faz exatamente o contrário da função utf8_decode, ela decodifica uma string no padrão ISO-8859-1 para o padrão utf-8. Assim uma determinada string do padrão latino pode ser utilizada juntamente com outros caracteres sem ocorrer erros de renderização. Aqueles famosos caracteres de interrogação ().

Um Exemplo bem útil para o uso destes dois comandos é na criação de URLS amigáveis

function smartURL($str){
    $str = strtolower(utf8_decode($str)); $i=1;
    $str = strstr($str, utf8_decode('àáâãäåæçèéêëìíîïñòóôõöøùúûýýÿ'), 'aaaaaaaceeeeiiiinoooooouuuyyy');
    $str = preg_replace("/([^a-z0-9])/",'-',utf8_encode($str));
    while($i>0) $str = str_replace('--','-',$str,$i);
    if (substr($str, -1) == '-') $str = substr($str, 0, -1);
    return $str;
}

No exemplo acima o utf8_decode() foi utilizado para remover possíveis incompatibilidades com acentos e letras maiúsculas. A função basicamente remove caracteres maiúsculos com  strtolower(), remove qualquer acentuação com strstr(). Depois ele remove qualquer caractere que não sejam de a-z e 0-9 utilizando o preg_replace(). Por fim, substitui-se as duplicações de ‘-‘ e remove um possível ‘-‘ no último caractere com str_replace  e substr() respectivamente.

Concluindo, o utf8_decode e utf8_encode são funções auxiliares muito úteis para conversão entre caracteres latinos e o formato universal. Muitas vezes elas são utilizadas para tratamento de acentuações, e caracteres especiais inclusos no formato latino. Lembrando que se você não utiliza caracteres latinos, este comandos não terão nenhum efeito para sua aplicação.

Espero que tenha ajudado com esta explicação e até a próxima.

Tenha todo o desempenho para o seu site com a Hospedagem Cloud DialHost. Servidores em cloud prontos para receber sites em PHP. Saiba Mais.

 

Felipe Moraes
Felipe Moraes

Desde pequeno eu adorei tecnologia e este sentimento me fez estudar e trabalhar com desenvolvimento, design de interfaces e interação. Esta vontade de melhorar e aprender com a tecnologia me fez estar aqui na DialHost desde 2012.