Prevenção de Timing Attack no PHP

Resumo:
Introdução

Timing Attack (ataque baseado em tempo) é um tipo de ataque a sistemas. Ele é pouco conhecido e normalmente é realizado por crackers mais avançados. Neste artigo, veremos o que são estes tipos de ataque e como podem ser prevenidos no PHP.

Utilizando as exceptions da SPL do PHP

Resumo:
Introdução

No artigo Try Catch Finally, vimos sobre o conceito de exceptions e seu funcionamento no PHP (onde/como são emitidas e onde/como são capturadas). Neste artigo, veremos sobre a correta utilização das exceptions definidas pela extensão SPL, então, se você ainda não conhece bem o conceito, recomendo a leitura daquele outro post antes de continuar.

Infelizmente, a documentação destas exceptions não deixa muito claro os possíveis pontos em qua cada uma pode ser usada. Portanto, as recomendações que faço são com base naquilo que compreendi da documentação.

API para hash de senhas no PHP 5.5

Resumo:
Introdução
cadeado

No artigo Autenticação e criptografia de senhas, vimos os mecanismos que a linguagem PHP oferece para gerar hash, especialmente para armazenamento seguro de senhas, além do processo de conferência de um hash com a senha real. Porém, até então não existia uma padronização sobre este processo. Com isso em vista, a equipe de desenvolvimento do PHP implementou uma API para geração de hash de senhas.

Este artigo irá apresentar esta, que é uma das novidades do PHP 5.5.

Acesso do Apache a outras partições

Resumo:
Quadro sobre os índios apache

Ontem me deparei com um problema que eu nunca tinha visto antes. Instalei o Apache no Fedora 14 (Linux), que vem configurado para utilizar o diretório "/var/www/html" como repositório de sites, mas ele não estava conseguindo acessar arquivos/diretórios em outras partições.

Utilizando Sessões em PHP de forma inteligente

Resumo:
macaco pensando
Introdução

Armazenamento de dados em sessão é um mecanismo oferecido pelo PHP que permite que a aplicação armazene/recupere dados específicos por usuário e compartilhados entre diferentes scripts. Este recurso é comumente utilizado para garantir a autenticação do usuário para que ele só precise informar a sua credencial uma única vez (log-in). Porém, este recurso também é importantíssimo para criar aplicações com nível de dinamicidade alto, e que requer o armazenamento constante de dados temporários, como uma cesta de compras, por exemplo. Neste artigo, veremos como utilizar a sessão de forma inteligente e otimizada, além de aprofundar em seu funcionamento.

Gravando arquivos em BD usando PDO do PHP

Resumo:
escrevendo no HD
Introdução

Existem duas formas mais convencionais de se armazenar arquivos em sistemas de informação: gravando em um diretório reservado ou gravando no banco de dados. Gravando em um diretório, existem alguns riscos como o arquivo poder ser acessado por usuários do servidor, ou o arquivo ser acessado por qualquer pessoa da Web se ficar em um diretório visível na Web. Guardando o arquivo em BD, existe o inconveniente do BD poder ficar com um tamanho muito grande, embora ofereça uma segurança adicional. Neste artigo veremos como gravar e recuperar arquivos do BD usando PDO. Para mais detalhes sobre PDO, leia antes o artigo PDO.

Web Developer, plugin essencial

Resumo:
inspetor bugiganga
Introdução

Web Developer é um plugin para o navegador Firefox que oferece vários recursos úteis para programadores Web. Este artigo vai apresentar seus principais recursos.

De fato, ao instalar, a impressão que temos é que instalamos um canivete com mil e uma utilidades e nem sabemos por onde começar a utilizar. Aos poucos, descobrimos as de uso mais comum e nos adaptamos para utilizar o que interessa.

Configurações do PHP

Resumo:
Introdução

PHP é uma linguagem interpretada que permite que sejam configuradas várias diretivas, tanto do core da linguagem quanto das suas extensões. A lista com todas as diretivas da linguagem são mostradas no manual.

Cada diretiva possui um "modo de mudança", que define onde e quando ela pode ser modificada. Por exemplo, algumas só podem ser definidas no arquivo de configurações gerenciado pelo administrador do servidor, por questões de segurança, enquanto outras podem ser alteradas pelo programador na própria aplicação.

Os modos de mudança das diretivas são:

  • PHP_INI_USER - Pode ser modificada com a função ini_set, arquivo .user.ini ou no Registro do Windows.
  • PHP_INI_PERDIR - Pode ser modificada no arquivo php.ini, .htaccess, httpd.conf ou .user.ini.
  • PHP_INI_SYSTEM - Pode ser modificada no arquivo php.ini ou httpd.conf.
  • PHP_INI_ALL - Pode ser modificada em qualquer lugar.

Observação: algumas diretivas pertenciam a um modo de mudança até determinada versão do PHP, mas mudaram para outro modo em outra versão do PHP. Estas informações são apresentadas na lista de diretivas da linguagem.

Evitando o "autocomplete" de navegadores

Resumo:
Introdução

Sistemas Dinâmicos Web normalmente são repletos de formulários. Em alguns deles, é útil que o navegador ofereça sugestões de preenchimento automático baseado no histórico de preenchimento de determinado campo. Normalmente os navegadores gravam estes tipos de informação de acordo com o valor do atributo "name" do input de texto (e, talvez, de acordo com a URL em que o campo foi gerado).

Porém, em alguns campos, não desejamos este recurso por uma questão de segurança e/ou confidencialidade.

Autenticação e Criptografia de Senhas com PHP

Resumo:
Introdução
cadeado

É comum que sistemas de informações utilizem um mecanismo de autenticação para acesso às ferramentas restritas através de um login e senha. Por questões de confidencialidade e segurança, é comum, também, que as senhas fiquem guardadas de forma criptografada no banco de dados. Os algoritmos de criptografia usados para estes casos são aqueles de via única (unidirecional), ou seja, que não permitem que um valor codificado seja descriptografado facilmente. O nome dado a um valor criptografado também é chamado de "hash".

PHP oferece diferentes alternativas para criptografar uma senha. Cada uma delas pode ter suas peculiaridades na hora de se montar o mecanismo de autenticação. Vejamos algumas das principais funções usadas para criptografia de senhas:

  • md5 - Gera uma sequência binária de 16 bytes (ou 32 símbolos hexadecimais)
  • sha1 - Gera uma sequência binária de 20 bytes (ou 40 símbolos hexadecimais)
  • crypt - Gera um hash de acordo com um algum algoritmo escolhido (poucas opções)
  • hash - Módulo que oferece diferentes algoritmos de criptografia (para saber os disponíveis, basta usar hash_algos)
  • mcrypt - Módulo que oferece diferentes algoritmos de codificação/decodificação (para saber os disponíveis, basta usar mcrypt_list_algorithms)
  • mhash - Módulo obsoleto por hash.

Controle de Erros em PHP

Resumo:

Tratamento de erros é a estratégia usada para capturar a ocorrência de uma situação que impede o sucesso de uma operação do sistema. Isso pode se dar em diferentes níveis. Em baixo nível: uma função pode receber um parâmetro inesperado. Em alto nível, uma ferramenta pode não aceitar determinada sequência de ações do usuário.