A. Geral
- Aplicam-se as regras de segurança genéricas para o Apache, PHP e MySQL.
B. Instalação
- Não usar o prefixo de tabela MySQL "jos_".
- Definir as permissões do configuration.php para 444 (ou pelo menos 644).
- Em geral, os ficheiro PHP precisam de permissões 644 (preferencialmente 444) e as diretorias 755 (ou preferencialmente 555).
- De forma geral é boa ideia mover as diretorias /tmp, /log e todas as diretorias que precisem permissão de escrita (caches, imagens, uploads, etc) para FORA da diretoria pública (public_html), retirando-lhes portanto a possibilidade de acesso através de HTTP. No entanto isto pode causar problemas com a diretiva open_basedir do PHP e com algumas extensões.
- Não permitir o upload de scripts
- Renomear o ficheiro htaccess.txt para .htaccess e ligar o RewriteEngine.
- A adição destas linhas ao .htaccess bloqueia alguns exploits mais comuns:
########## Begin - Rewrite rules to block out some common exploits
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Block out any script that includes a < script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script that tries to set CONFIG_EXT (com_extcal2 issue)
RewriteCond %{QUERY_STRING} CONFIG_EXT([|%20|%5B).*= [NC,OR]
# Block out any script that tries to set sbp or sb_authorname via URL (simpleboard)
RewriteCond %{QUERY_STRING} sbp(=|%20|%3D) [OR]
RewriteCond %{QUERY_STRING} sb_authorname(=|%20|%3D)
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits
C. Utilizadores e passwords
- Usar passwords não triviais.
- Criar uma conta de administrador com um username não trivial (ou seja, diferente de admin, administrator, root, etc). Promover esse utilizador a super-user e apagar a conta de admin. Além de ser um username conhecido, a conta de admin tem sempre o id 42 (homenagem ao Hitchhicker's Guide to The Galaxy), por isso é uma vulnerabilidade potencial (para Joomla anterior a 2.5.5).
D. Extensões
- Não instalar extensões desnecessárias.
- A extensão sh404SEF adiciona mais um nível de segurança e capacidades SEF (Search Engine Friendly). Esta extensão é vulnerável nas versões < 3.7.0.
- A extensão Admin Tools Core permite aplicar num único local várias das proteções aqui referidas.
- A extensão Akeeba Backup Core permite fazer backups completos de forma simples.
- Há outras extensões que melhoram a segurança (mas ver regra D.1).
E. Não fornecer informação gratuita
- Não publicitar o nome e versão do Joomla. Remover a meta tag "Generator".
- Não publicitar o nome e versão das extensões.
F. Ações periódicas
- Fazer backups regulares (por exemplo com o Akeeba Backup)
- Fazer regularmente uma "inspeção visual" e eliminar ficheiros suspeitos/desnecessários.
- Fazer testes de vulnerabilidades (com o nikto, joomscan, etc) e corrigir as vulnerabilidades detetadas.
- Manter-se atualizado sobre as novas vulnerabilidades descobertas consultando sites especializados (http://secunia.com/search/?search=joomla, http://www.frsirt.com/english, http://www.milw0rm.com/, por exemplo)
G. Atualizar
- Manter o Apache, PHP e MySQL atualizados.
- Manter o Joomla atualizado. A partir da versão 1.6 há a opção de o Joomla se autoatualizar (mas é necessário verificar a disponibilidade das extensões). Não usar Joomla 1.5 ou anterior.
- Manter as extensões atualizadas. Mesmo as extensões mais conhecidas e populares têm problemas de segurança.
Referências
http://docs.joomla.org/Security_Checklist/Joomla!_Setup
http://docs.joomla.org/Joomla_Administrators_Security_Checklist
http://www.marcofolio.net/joomla/7_tips_to_optimize_joomla_security.html
http://docs.joomla.org/Joomla_Administrators_Security_Checklist
http://www.marcofolio.net/joomla/7_tips_to_optimize_joomla_security.html