Este artigo da série Segurança e Joomla! do Joomla! Brasília é uma adaptação ao original postado no website http://www.torkiljohnsen.com.
1. Siga as suas melhores práticas
Caso você já tenha criado um website e tenha tomado medidas de seguranças básicas, como instalação de extensões de segurança (Jupdateman JSecure), não há necessidade de reinventar a roda: Use uma ferramenta de backup como Akeeba Backup ou algo semelhante, faça um backup do website e use esse backup como um ponto de partida para o seu novo website. Ou seja, mantenha uma instalação básica padrão para todos os seus projetos.
2. Não use o prefixo jos_ como padrão das tabelas do Banco de Dados.
Muitos ataques de injeção SQL são baseados na suposição de que as tabelas de seu banco de dados são denominados “jos_”. Caso você tenha optado por usar o padrão “jos_”, ele poderá ser mudado com um simples script PHP.
3. Um usuário de banco de dados por instalação
Não use um mesmo usuário para vários banco de dados e nunca use root como usuário de conexão. Geralmente o usuário de conexão ao banco e o nome do banco, são baseados no nome de seu domínio. Mas isto vai depender do provedor de hospedagem.
4. Considere uma senha forte para a conexão ao banco de dados
Use uma senha longa e complicada para o acesso ao seu banco de dados. Hoje em dia é muito fácil de decifrar um hash MD5, base de encriptação utilizada pelo Joomla (já foi quebrado) ou SHA1. Inclusive existem aplicações web que ajudam nesse processo. Se alguém começar a tentar quebrar a senha de acesso ao banco de dados, por força bruta por exemplo, é só questão de tempo até obter o sucesso. Uma boa forma de criar senhas fortes é utilizar caracteres alfanuméricos e caracteres especiais como @ # $ e etc…
5. Não instale o exemplo de conteúdo
O exemplo de conteúdo server para que você se familiarize com o Joomla. Em produção, você não deve utilizá-los tendo em vista que são fáceis de serem identificados pelos “exploits”. Além disso, você pode se esquecer de remover totalmente o conteúdo de exemplo.
6. Desinstalar coisas que você não precisa
Desinstale todas as extensões que você não irá utilizar em seu projeto. Desde os componentes do núcleo do Joomla até os templates que estão sobrando. Observe, por exemplo, que ao instalar o editor JCE você estará reinstalando o editor WYSIWYG TinyMCE, pois ele funciona encapsulado no JCE. Joomla vem com o editor TinyMCE instalado como editor padrão, então você terá duas instalações TinyMCE. Eu particularmente sempre usei o TinYMCE e ele sempre deu conta do recado nesses 07 (sete) anos de uso do CMS.
7. Desativar o registro / login
Se o seu website não terá conteúdo restrito ou cadastro de usuários, desabilite o módulo Login form
8. Desativar XML-RPC
Desative o XML-RPC do servidor se você não precisa dele.
9. Devo remover a tag generator do Joomla?
Apesar de no artigo original ser indicado a retirada, eu discordo, pois além de ser um “hacking” no código-fonte fere a GNU/GPL no sentido de estarem sendo retirados os créditos ao programa gerador, no caso, o Joomla!
10. Substitua o padrão de informação meta Joomla com seus próprios dados
Em sua configuração global, certifique-se de substituir os metadados padrão. Mais do que segurança este fato irá incidir diretamente em suas métricas de Google Marketing, ou seja: Encontrabilidade.
11. Excluir a conta de usuário padrão
O userid 62 e o nome de usuário “admin” presentes na tabela #__users, representa uma fraqueza e devem ser substituídos imediatamente após a publicação do website na Internet. Para tal, acesse o backend e crie um novo usuário com perfil de superadministrador. Depois, faça o login com o novo usuário e exclua o antigo admin. Lembre-se que o admin é o primeiro usuário a morrer em qualquer sistema.
12. Ativar o (.htaccess)
O htaccess.txt está na raiz do seu website joomla e deve ser renomeado para (.htaccess). Porém, alguns fatores devem ser observados:
a) o (.) antes de um nome de arquivo, significa que o arquivo é um arquivo oculto do GNU/LINUX. Logo, não irá funcionar o Ruindows.
b) o (.htaccess) é um arquivo extremamente perigoso e alguns provedores simplesmente não permitem o envio do mesmo, ou durante a atualização do apache, passam a restringir seu uso.
13.Use url’s amigáveis
Muitos “exploits” funcionam baseados em sniffs de robots através das URLs dinâmicas do Joomla!. Por exemplo, digamos que o componente (com_algumacoisa) foi invadido e você está usando o mesmo em seu website. O “exploit” irá buscar por com_algumacoisa em sua url e uma vez achado, irá explorar as vulnerabilidades do mesmo para invadir seu website. O uso de Url’s amigáveis além de ajudar sobremaneira na indexação de seu website pelo google é uma excelente prática de segurança.
14. Mover logs e cache para fora da raiz do website
Uma boa prática é alterar o caminho do log e cache do seu website para um diretório fora da raiz, evitando o acesso via browser.
15. Criptografar a comunicação, ou pelo menos o login
Dependendo do provedor você poderá acessar o backend do seu website via https, ou seja, usando criptografia. Uma boa alternativa para os que desejarem abstrair a solução do provedor é usar o componente Encrypt configuration.
16. Inscreva-se no canal de notícias de segurança do Joomla
http://feeds.joomla.org/JoomlaSecurityNews.
17. Instale os patches de segurança imediatamente
Quando for lançado um patch de segurança ou uma nova versão stable do CMS atualize o seu website imediatamente. Existe uma boa extensão para isso é Jupdateman.
18. Faça Backup de seu website regularmente
Se o provedor não faz backup para você, inclua uma rotina em seu projeto. Para provedores que permitem acesso via ssl você pode agendar o backup no cron do servidor. Não é possível? Use o Akeeba que é uma excelente extensão para backup. Inclusive, a versão paga possibilita o agendamento dos mesmos.
19. Proteja o /administrador com medidas extras
Encapsule o /administrator de seu website usando um simples plugin de segurança como o JSecure. 70% das tentativas de ataque serão barradas pelo simples fato de não ser encontrado o /administrator de seu website.
20. Dê as permissões corretas para arquivos e diretórios
A permissão dos diretórios de seu website devem estar com 0755 e os arquivos com 0644. Nunca, jamais, em hipótese alguma use 0777. Leia este artigo caso tenha dúvida em relação a permissão de diretórios e arquivos no GNU/LINUX.
21. Considere a instalação de extensões de segurança
Existem várias extensões voltadas a implementação de segurança em seu website Joomla. Visite o JED, identifique-as e faça os devidos testes. Neste artigo já indiquei as que penso serem fundamentais: Akeeba, JSecure, Jpudateman e Configuration Ecnrypt
22. Evite expor informações
Desabilite o relatório de erros no backend do Joomla, escolhendo a opção Nenhuma para relatórios de erros nas configurações globais. É interessante que a diretiva display_errors do php também esteja desabilitada. Mas, lembre-se que dependendo do contexto o display_errors deve estar habilitado. Por exemplo: você instala um módulo e ele dá pau. Com o display_errors desabilitado você verá apenas uma página em branco.
Esta diretiva fica no php.ini e você não terá acesso no servidor. O máximo que poderá fazer é criar uma flag no seu arquivo (.htaccess) alterando o padrão de ON para OFF.
23. Adicionar uma solução de ACL personalizada
O ACL padrão do Joomla não é muito restritivo e você pode estar dando mais privilégios de acesso do que gostaria. Considere a adição de uma extensão para melhorar a ACL, por exemplo o NoixAcl.
24. Evite extensões com código fonte criptografado
Você não pode corrigir erros no código fonte se ele estiver criptografado, além de você ficar à mercê do desenvolvedor da extensão. A regra é simples: em software liver encontramos extensões livres e gratuitas, livres e pagas ou comerciais e pagas. Não existe extensão mais ou menos livre disponibilizada com código-fonte criptografado, simplesmente não use.
25. Evite extensões legadas
Não utilize extensões que não foram desenvolvidas nativamente para Joomla!1.5. Joomla!1.0 acabou em julho do ano passado e todos já tiveram tempo suficiente para desenvolver dentro dos padrões do novo framework.
26. Evite extensões inseguras
Quando você instala qualquer extensão no Joomla! você perde a garantia do CMS. Ou seja, a versão stable é liberada com as extensões que fazem parte do seu núcleo. Por exemplo: não existe álbum de fotos em uma instalação padrão do Joomla, logo, quando você instala um componente de galeria de imagens você o faz por sua conta e risco.
Lembre-se que todo componente cria automaticamente um objeto de banco de dados e passa a ser uma célula viva dentro de seu website, muitas vezes com seu próprio painel de controle. Então, muito cuidado com o que está instalando em seu website joomla ok? Dê preferência a extensões populares e que tenham os projetos continuados e atuais e sempres consulte a lista de vulnerabilidades antes de instalar qualquer coisa em seu website.
27. Use uma IDE
IDEs podem ajudar bastante com a qualidade do código, desenvolvimento e testes. Para windows indico o Aptana com plugin php e para GNU/LINUX indico o bluefish, aliás, o que eu uso.
28. Use um sistema de controle de versão
Coisas como o SVN e Git serão um salva-vidas para você caso algo tenha sido alterado ou retirado sem o seu conhecimento. Também torna mais fácil de manter e implantar diferentes versões do seu software. Utilize versão, mesmo que você seja o único a fazer o desenvolvimento, vale a pena.
29.Teste localmente, antes de colocar em produção na web
Busque um ambiente de teste e desenvolvimento próximo do ambiente de produção. De preferência use GNU/LINUX sempre pois ficará bem próximo do ambiente do provedor. Mas se não der, opte pelo Xampp que é o melhor SDK para windows em mnha opinião. Erros não devem aparecer em websites em produção, cuidado com as páginas 404 e nunca, mas nunca mesmo deixe uma página em seu website com o dizer: em construção.
30. Use CSRF para proteção de formulários
http://docs.joomla.org/How_to_add_CSRF_anti-spoofing_to_forms
31. Filtrar dados
Filtrar a entrada e saída do conteúdo fornecido pelo usuário, é muito útil para evitar ataques de SQL injection e XSS.
Ex: http://docs.joomla.org/Tutorial:How_to_make_your_Joomla_addon_more_secure_WIP
32. Mantenha o seu código-fonte enxuto
A reutilização de código é uma característica da OOP, então reutilize o código ao máximo e evite tentar reinventar a roda. Cuidado com a short tag do php pois você poderá ter problemas caso esteja desabilitada no servidor. Logo, comece suas linhas de código com (
33. Use um Framework para desenvolver suas extensões
Se você está criando uma extensão do Joomla, você deve considerar o uso do framework Nooku, ou o alphaplug, que são duas soluções interessantes que ajudam na redução do código e na rapidez do desenvolvimento.
34. Nenhum código executável em arquivos de classe
Nunca deixe um código executável em seus arquivos de classe.
35. Use _JEXEC
A primeira linha executável de qualquer script php no Joomla, seja um componente, módulo, plugin ou template, é a constante _JEXEC. Ela garante que o código será executado apenas pela aplicação. Faça um teste rápido e assustador:
a) abra a index.php de qualquer template e comente a linha J_EXEC or die restrict access. Como? Basta colocar // no início dela;
b) agora digite em seu navegador a url de seusite/templates/onomedotemplatedoseusite Executou? Você acabou de abrir um backdoor em seu website. Sinistro não? Corra e retire o // e tente o mesmo macete. Resultado? Restrict access.
36. Mantenha nomes e versões escondidas
Mostrar os créditos dos componente em sua frontpage além de perigoso, se as mesmas estão desatualizadas, vai contra a usabilidade. Seu website está sob o domínio .com.br? Então deve estar em português. Nada de powered by Phoca Gallery e etc…ok?
36. A escolha do provedor para seu website
Este um capítulo a parte já que temos “N” bons provedores e outros péssimos, pelo mundo afora. Fica a minha dica na hora de escolher o provedor:
a) fuja dos que oferecem muitas vantagens por um preço irrisório;
b) fique atento com a versão do LAMP (LINUX, APACHE, MYSQL e PHP) utilizados pelo provedor. Lembre-se que eles são a base do funcionamento de seu website Joomla! Qualquer software desatualizado aumentará sobremaneira as possibilidades de uma invasão e daí, não tem versão stable nem reza brava que de jeito; e
c) por fim, lembre-se que o provedor só quer vender. Uma vez invadido ele vai tirar seu website do ar e vai dizer que a culpa é do programa vagabundo que você usou. Lembra-se? O Joomla! Apesar de 90% das invasões serem por falhas na hospedagem eles nunca irão concordar e a menos que você tenha recursos para provar a vulnerabilidades deles, recursos esses que não fazem parte do escopo deste artigo, Game Over para você.
37. Acompanhe sempre a lista de extensões vulneráveis
Fonte: www.torkiljohnsen.com/2010/09/18/collection-of-joomla-security-tips/
Tradução e adaptação: Júlio Coutinho (www.joomlabrasilia.org/tutoriais-de-joomla/seguranca-e-joomla/648.html)