Ocultando as mensagens de erro do PHP
Quando seu código tem algum erro no PHP, o navegador lhe retorna este erro com riqueza detalhes, inclusive como número da linha, o que lhe ajuda muito a
resolver o problema (principalmente com includes).
O lado ruim é que estas informações são úteis apenas quando o site está em desenvolvimento, porque quando está em produção, as informações são desnecessárias para quem acessa o site e podem dar alguma dica para possíveis invasores.
Para resolver isso, existe uma opção no arquivo
php.ini chamada "display_errors". Quando esta opção está definida com o valor
On, significa que cada erro de PHP será mostrado na tela. Para que os erros não apareçam, use a opção
Off.
Ocultando visualização de arquivos
No desenvolvimento de sites com upload de arquivos, sejam eles PDF, JPG, DOC, etc, às vezes é necessário "camuflar" a pasta onde os arquivos se encontram para
que os mecanismos de busca não listem estes arquivos desordenadamente, ou para que o usuário, digitando o caminho direto da pasta, não tenha uma listagem completa destes arquivos. Isso chama-se indexação.
Dentro do arquivo de configuração do Apache,
apache.conf, você pode restringir os tipos de arquivos que serão indexados com a opção "IndexIgnore".
Para servidores que trabalham com vários sites no mesmo servidor, a regra pode ser aplicada a apenas um dos domínios, conforme no exemplo abaixo:
<VirtualHost *:80>
DocumentRoot "/var/www/meusite"
ServerName www.meusite.com
ServerAlias meusite.com
IndexIgnore *.jpg *.gif *.bmp *.pdf *.doc
</VirtualHost>
Ocultando a visualização de diretórios
Da mesma maneira que existe como restringir a visualização de arquivos, pode-se restringir a listagem de diretórios, através da opção abaixo, usada no mesmo local
do exemplo anterior:
Options -Indexes
Proteger com senha a pasta com arquivos administrativos
Esta é mais uma dica do que um passo a passo. Se o seu site possui páginas administrativas, na qual apenas você deve acessar, uma dica importante é restringir o
acesso a esta página por meio de senha.
Porém, é importante lembrar que existem outras maneiras bem melhores para autenticação de usuário por meio de login e senha, mas tais alternativas demandam mais trabalho e precisão. Esta dica aqui fica para uma solução rápida.
Para ver como proteger suas pastas, entre em:
register_globals (On|Off)
Esta diretiva do PHP, por padrão, vem configurada como Off no
php.ini, porque subtende-se que hoje em dia nenhum programador decente precisa deste recurso ativado. Se você administra sites mais antigos (bem antigos) ou um servidor que hospeda várias páginas, já deve ter se deparado com a necessidade de ativar esta diretiva para que um site não parasse de funcionar.
Porém, ativando no "php.ini", esta alteração valerá para todos os sites hospedados no servidor, e isso é perigoso.
É necessário, então, ativar esta diretiva somente nos sites que necessitam deste recurso, e isto deve ser feito dentro do
apache.conf.
Dentro das diretivas que definem um domínio virtual no Apache, você pode definir opções relativas ao
php.ini. Veja o exemplo de como habilitar o "register_globals" só para um dos domínios:
<VirtualHost *:80>
DocumentRoot "/var/www/meusite"
ServerName www.meusite.com
ServerAlias meusite.com
php_value register_globals 1
</VirtualHost>
Informações importantes em arquivos abertos
Não guardar informações de login ou senha em arquivos com extensões
.inc, .doc, .txt ou outras que não sejam interpretadas pelo PHP, é uma dica simples e óbvia, mas muita gente esquece e acaba deixando brechas no servidor.
Ao desenvolver um site é comum usar arquivos para guardar dicas, blocos de código, logs de erro, etc. Porém, tais informações contidas no arquivo são facilmente
capturadas se alguém tentar fazer um download direto do arquivo via URL.
Certa vez encontrei um site com um arquivo denominado "autenticacao.txt" no qual estava a maioria dos códigos de autenticação que o cara fez no site, inclusive com a senha e login, ou seja, ele copiava dicas da Internet, transferia dentro do arquivo
.txt e depois aplicava os códigos às páginas PHP.
Considerações finais
É óbvio que cada desenvolvedor tem suas próprias medidas de segurança e falar neste assunto sempre vai gerar muitos comentários. Para não esticar muito o artigo
e torná-lo chato, resolvi postar aqui apenas algumas dicas simples, de fácil e rápida implementação, mas JAMAIS tome-as como únicas, ou como as mais importantes.
* Elas são complementares!
Espero que este artigo possa abrir discussão para que outras pessoas enriqueçam-no com outras informações e mais dicas úteis.