10 Dicas Para Proteger O Joomla

Publicamos uma versão atualizada (3 de Julho de 2013) sobre segurança do Joomla:

Guia Prático Sobre Segurança Do Joomla

1. As Malditas Extensões – Sabor Doce, Digestão Amarga

Quantos de nós é que instalamos extensões por vaidade ou para satisfazer um prazer apenas estético? Eu sou culpado! É aquela febre de conhecer as novidades, a febre dos gadgets! Mas a digestão é amarga… Quase todos os problemas do Joomla, de segurança, muitas vezes também de perfomance, acontecem por causa das extensões que instalamos.

O código do próprio CMS é relativamente seguro. Mas, as extensões não são criadas pelos programadores do Joomla. São um contributo de programadores, quase sempre bem intencionados, mas nem sempre competentes. Você próprio, se souber programação, pode criar uma extensão para o Joomla. Ora, o facto de serem criadas por programadores que nem sempre dominam a programação do próprio CMS e, nalguns casos, não programam código competente e seguro, resulta na existência duma lista grande de extensões inseguras. A utilização duma única extensão insegura coloca em perigo todo o seu site.

O que fazer? Avalie cuidadosamente se precisa ou não de determinada extensão. Um dos mandamentos para manter o Joomla seguro é mantê-lo actualizado. Pois, quando estiver a avaliar se precisa ou não duma extensão, lembre-se do seguinte: se instalar 10 extensões, terá que manter o Joomla actualizado, mas também cada uma dessas 10 extensões. Se não estiver atento às novas versões de cada extensão, não fique muito admirado se acordar um dia e encontrar uma página dum hacker turco no lugar do seu site.

Se descobriu que está a utilizar uma extensão insegura e decidiu deixar de utilizá-la, não clique apenas para unpublish a extensão. Apague os ficheiros do servidor, caso contrário é como se ainda estivesse a utilizar a extensão. Se os ficheiros estiverem no servidor, o seu site estará vulnerável.

Como é que sabe que apagou todos os ficheiros? Se você instalou uma extensão chamada mod_ext1, procure um ficheiro chamado mod_ext1.xml. Abra esse ficheiro e verifique se apagou todas as pastas e ficheiros que constam nessa lista.

2. Cópias De Segurança – Não Faça O Seguro Depois Do Acidente!

Obrigue o seu webmaster, a quem você paga 1000 EUR por mês, a criar um manual com o que deve ser feito em caso de acidente (bug no script, hacker turco, disco furado, morte súbita da empresa de alojamento ou outra tragédia). E a elaborar e executar uma estratégia de cópias de segurança, que inclua a verificação da integridade dessas cópias.

Você não tem webmaster? Não se preocupe. Nesse caso, o webmaster é você. Poupe os 1000 Eur e leia com atenção.

Faça um backup total ou apenas dos ficheiros 1 x por semana ou 1 x por mês e sempre que instalar uma extensão, componente, template ou fizer qualquer alteração no código. Guarde pelo menos as últimas 4 cópias. Ou guarde-as todas. Se for como eu, guarda tanto lixo no computador, porque não guardar o que realmente é importante?! Se vai guardar várias cópias, organize as pastas de modo que fique claro a data de cada cópia de segurança.

Faça um backup da base de dados com a frequência que as actualizações do seu site justificarem. Se o seu site for actualizado diariamente, faça actualizações diárias da base de dados. Ou até mais do que 1 por dia. Se não for actualizado com tanta frequência, nesse caso, será você a pessoa melhor informada para decidir com que frequência é que deve efectuar cópias da base de dados. Não faça cópias totais todos os dias! Vai estar a abusar dos recursos do servidor e francamente se fizer isso merece um pontapé no traseiro!

Não guarde as cópias no seu alojamento. Descarregue as cópias para o seu PC e não custa nada ter também um backup dos ficheiros importantes que guarda no seu PC.

Se o seu site for valioso, teste a integridade dessas cópias ocasionalmente. Dá trabalho, não dá. Pois dá. Mas a responsabilidade pelas cópias de segurança e pela verificação da integridade das mesmas compete ao webmaster. E ou você tem orçamento para contratar e pagar ao webmaster para ter este trabalho ou é você que vai ter que fazê-lo. Com prática, dá menos trabalho…

3 – Não Deixe O Cofre No Jardim – configuration.php

Quando carregou o seu site para o servidor, teve que efectuar o upload dos ficheiros para um determinada pasta. Nos servidores com cpanel, é a pasta public_html. Nos servidores com Plesk, é a pasta httpdocs. Ora, essa pasta é aquela que está acessível a qualquer utilizador anónimo. Se você colocar um ficheiro index.html nessa pasta, eu vou conseguir aceder a este ficheiro. O meu sobrinho de 3 anos vai conseguir. E qualquer outra pessoa com um browser vai também conseguir.

Essa pasta é a mais vulnerável em qualquer servidor. Portanto, é boa ideia mover os ficheiros mais sensíveis para uma pasta menos vulnerável. É o caso do ficheiro configuration.php.

Mova esse ficheiro para uma pasta acima da public_html ou httpdocs. Mude o nome do ficheiro para umnomequalquerqueeuseiemaisninguemsabe.php e coloque um novo ficheiro configuration.php no lugar do anterior, com o seguinte código:


<?
require( dirname( _FILE_ ) . '/../umnomequalquerqueeuseiemaisninguemsabe.php');
?>

Mude as permissões deste novo ficheiro para 444. Se precisar de mudar as configurações, faça o manualmente no umnomequalquerqueeuseiemaisninguemsabe.php.

4. Actualizações Do Joomla – Trabalho Para Robot

Actualize sempre o Joomla e com urgência. E cada extensão que você instalou. Porquê? Imagine que tem uma vivenda magnífica (se tiver, não precisa de imaginar), e descobre que uma das suas janelas no R/C está partida, tem um buraco enorme. Quando é que você vai reparar a janela?

Subscreva à Joomla Security Mailing List. Poderá fazê-lo através do próprio Joomla. Faça login como administrador. No menu, seleccione Extensions e depois Module Manager. Seleccione Administrator. No menu dos icons, seleccione New, depos Feeds Display. Na página de configuração dos Feeds, coloque como título Notificações de Segurança e seleccione a opção minimum. Coloque o feed: http://feeds.joomla.org/JoomlaSecurityNews no campo do url. Seleccione a posição cpanel. Clique Apply no menu dos icons. Clique para guardar no menu dos icons.

5. Permissões De Escrita – Não Deixe A Porta De Casa Aberta

Verifique se a sua empresa de alojamento corre o PHP em modo CGI com su_php. Esta opção é mais segura que a instalação do PHP como módulo do apache. Sem entrar em demasiados detalhes técnicos, se o PHP corre modo modo CGI, não precisa de utilizar permissões 777 nalgumas pastas, onde o Joomla precisa de escrever. Se precisar de utilizar permissões 777, a sua conta fica aberta a ataques doutros utilizadores no mesmo servidor. E também coloca questões complicadas em termos de gestão do alojamento. Se carregar um ficheiro com o Joomla, depois não consegue alterá-lo através de ftp e vice-versa.

Num servidor onde o PHP corre como CGI, pode dar permissões 755 às pastas onde precisa de escrever e funciona tudo bem. A regra é que os ficheiros tenham permissões 644 e as pastas 755.

Durante o processo de instalação, o Joomla precisa de permissões de escrita nalgumas pastas. Porque razão é que esse facto poderá ser um risco de segurança?

Este tutorial não vai tratar o tema das permissões ao nível de ficheiros e pastas num servidor Linux. Poderá consultar este tutorial, se quiser mais informação sobre esse tema, mas em termos muito sumários, se o servidor estiver a correr o php como módulo do apache, o php será executado pelo utilizador nobody ou apache. A sua conta de alojamento é representada pelo utilizador que você utiliza para fazer login no control panel ou por ftp, no cpanel é habitual que seja as asprimeirasoitoletrasdoseudominio. Portanto, o php é executado por um utilizador diferente (nobody) do seu utilizador (asprimeirasoitoletrasdoseudominio). Ora, para que o apache ou o nobody possa escrever dentro de pastas que pertencem ao seu utilizador, precisa que você dê permissões de escrita ao utilizador anónimo. Desse modo, um utilizador diferente, neste caso o nobody ou apache, poderão escrever numa pasta da sua conta. Mas qualquer outro utilizador, naquele servidor, poderá fazê-lo. Quando lê nas instruções de instalação que tem que dar permissões 777 às pastas modules, templates, etc, está a dar permissão a qualquer utilizador naquele servidor para escrever nessas pastas. E isso representa um risco em termos de segurança.

Quando o php corre como cgi, porque é executado pelo SEU utilizador e não pelo utilizador nobody ou apache, você já não precisa de dar permissões ao utilizador anónimo. Logo, APENAS o seu utilizador, naquele servidor, terá permissões de escrita nas suas pastas. Nesse caso, sempre que ler que tem que dar permissões 777 a determinada pasta, IGNORE essa instrução e dê apenas permissões 755.

E como é que poderá saber se o php corre como módulo do apache ou como cgi? Pergunte à empresa que lhe presta o serviço de alojamento. Ou coloque este código num ficheiro php, por exemplo: phpinfo.php


<?
phpinfo();
?>

Abra o ficheiro no browser e veja você mesmo: www.oseudominiolindo.com/phpinfo.php

Como gerir o risco, se o servidor correr o php com o utilizador nobody ou apache? Sempre que tiver que instalar alguma coisa, mude as permissões das pastas necessários para 777 e depois, dentro da pasta do joomla, execute estes comandos através de ssh:


find . -type f -exec chmod 644 '{}' \;
find . -type d -exec chmod 755 '{}' \;

Se não tiver acesso ftp, coloque este código num ficheiro php, exemplo permissoes.php, e abra esse ficheiro no seu browser: www.nomedoseudominio.com/permissoes.php


<?
shell_exec("find . -type d -exec chmod 755 {} \\;");
shell_exec("find . -type f -name '*.php' -exec chmod 644 {} \\;");
?>

6. Passwords – Coma Menos Queijo

Não se dê ao trabalho de actualizar constantemente o Joomla, de seguir todas estas recomendações, para depois deitar tudo a perder com a utilização duma password insegura. Preste atenção a este ponto. A password deve ter letras maiúsculas, minúsculas, números e caracteres especiais. Não precisa de ser muito extensa. Utilize por exemplo 3 letras maiúsculas, 3 números, uma letra minúscula e um caracter especial. Exemplo: M82+EhY2

Verifique também se a empresa de alojamento tem alguma defesa contra brute force attacks.

Se quiser, pode também proteger a pasta administrator com username e password. Se tiver acesso ao cpanel, tem uma opção chamada Password Protect Directories. Assim fica com uma dupla protecção, dado que para aceder à zona de administração, o hacker terá que efectuar um primeiro login para aceder à pasta administrator, antes de efectuar o login normal no Joomla.

Mas, não utilize esta dupla protecção para justificar a instalação de meia dúzia de extensões.

7. O Malando Do Google

De que forma é que os hackers decidem atacar o seu site? O método habitual é simples de explicar. Descobrem por exemplo que uma determinada versão duma extensão está vulnerável e a forma de explorar essa vulnerabilidade e depois procuram no Google através do comando inurl: a assinatura dessa extensão. O resultado é uma lista de sites vulneráveis e se o seu site estiver nessa lista, advinhe o que vai acontecer.

Utilize um componente SEF (Eearch Engine Friendly) de modo a rescrever o seu url. Assim não aparecerá naquelas listas e terá mais sucesso nas pesquisas que lhe interessam no Google, dado que o seu site ficará mais optimizado para o Google.

Na prática, o que acontece é o seguinte: os urls do Joomla e das respectivas extensões por defeito dizem demasiado ao visitante sobre o que está instalado, que versões é que estão instaladas, etc. Ao reescrever esses url, essa informação deixa de estar disponível. E os hackers são, na maioria dos casos, tipos preguiçosos. Se não fossem preguiçosos, teriam um trabalho honesto.

8. Templates – Uma Diva A Experimentar Roupa

O habitual quando entro na pasta de templates do Joomla é encontrar lá meia dúzia de templates abandonados. Quando instalamos o Joomla pela primeira vez, parecemos uma diva a experimentar roupa. E depois deixamos os templates espalhados pelo quarto.

Apague os templates que não está a utilizar. Quantos é que sobraram? Apenas um.

9. O User Admin – A Chave Na Fechadura

Seleccione o User Manager. Seleccione o registo do utilizador admin. Altere o valor do utilizador. Guarde.

A questão é simples. Para entrar como administrador, é necessário advinhar o username e a password. Qualquer hacker sabe que por defeito existe um utilizador admin. Se mantiver este utilizador, o hacker já terá completado 50% do trabalho. Se alterar o utilizador, o hacker terá que advinhar a password, mas também o utilizador.

10. As Register Globals – RG_EMULATION

O próprio Joomla amaldiçoa as Register Globals e depois pede aos utilizadores para desactivarem o RG_Emulation. O RG_ significa Register Globals. Algumas extensões precisam que o RG_Emulation esteja activado, dado que utilizam as Register Globals. O melhor é desactivar e não utilizar essas extensões.

Be Sociable, Share!

29 Comentários

  1. Infelizmente é muito importante estar atento a estas dicas, os ataques são cada vais uma constante da web, principalmente para quem usa os CMS mais populares. É uma seca, dá trabalho que não se vê, mas tem que ser.

    • E esses ataques podem ter consequências muito negativas em termos de SEO. Já vi centenas de instalações de Joomla. E a maioria estava desactualizada e desleixada. É preciso cuidar das actualizações. E da segurança.

  2. Desde já quero felicitar pelo bom trabalho que fez ao compartilhar toda esta informação… é bem verdade nos tempos de hoje todo o cuidado é pouco, o melhor mesmo é trancar bem as portas…
    Virei a ser um leitor deste site, agradou-me muito, tem aqui muito boa informação…

  3. Welber

    Parabéns pelo trabalho divulgativo, com relação a segurança em Joomla.
    Não tenho encontrado muitos artigos no Brasil que tratam sobre segurança no Joomla. Segurança e tão importante quanto SEO, design, navegabilidade, usabilidade, etc
    Serei um leitor assíduo de seu Blog se você continuar a falar sobre segurança em Joomla.
    Um abraço,

    • Olá Welber! Bem vindo e obrigado pelo seu comentário. É natural que haja mais artigos sobre segurança, dado que o Joomla é um tema prioritário no blog. Até temos 1 artigo a aguardar oportunidade para publicação sobre segurança no Joomla, que deve ser publicado durante o mês de Abril. Um Abraço Rui Soares

  4. Welber

    Prezado Rui Soares,
    No item 3. desse artigo, você falou sobre sobre mudar a permissão do ficheiro para 444, após mudança do local do configuration.php e renomeá-lo . . .
    Como são mudadas essas permissões . . . .você poderia explorar essa informação no próximo artigo????
    Obrigado,

    • Welber, estou a partir do pressuposto que você está a utilizar um sistema operativo Linux. E nesse caso você pode mudar as permissões com o ftp client. Eu tenho 3 artigos pendentes sobre outros assuntos. E depois faço um vídeo sobre segurança no Joomla. Quando publicar, respondo aqui nos comentários com um link para o vídeo. Um Abraço Rui Soares

  5. Li seu artigo todo, e achei ótimo.
    Eu tenho uma pergunta, meu site usa o ads manager para classificados, notei que não sao todos os anuncios dos usuarios que sao indexados (nem metade), entao verifiquei o arquivo robots.txt e a pasta components está como disallow, se eu colocar a pasta do ads manager a qual está dentro da pasta components como allow resolverá o problema?
    Será um risco de seguranca?

    Obrigado pelo artigo que me ajudou muito, espero respostas.

    • Olá Felipe! O ficheiro robots.txt não foi criado para gerir o acesso a pastas do seu website. Um robot mal intencionado pode ignorar as instruções do seu robots.txt. Eu não conheço o ads manager. Mas, se o problema é o disallow na pasta componentes, como é que metade dos anúncios aparecem indexados? Você pode criar regras específicas para determinados robots, nomeadamente aqueles que pertencem por exemplo ao Google. Está aqui um tutorial excelentehttp://www.mestreseo.com.br/robots-txt/tutorial-d… . Você pode também procurar suporte no fórum do ads manager:http://forum.joomprod.com/ . No fim do dia, você ainda vai descobrir que precisa de mais links para o seu website. Um Abraço Rui Soares

  6. Jose

    Rui,

    Realmente muito bom o artigo.
    Entretanto alterei o local e nome do config.php, o conteúdo publicado funciona, mas não o /administrator.
    Alguma sugestão?

    Grato,

  7. visitante

    Estou muito admirado com a ótima qualidade desse artigo.
    Agora já está adicionado aos favoritos do meu navegador.
    Meus parabéns e muito obrigado ao Rui!

  8. Giovanni

    fantástico..
    parabéns!!

  9. André

    Olá.

    No passo 3 quando se refere a deixar o seguinte código

    <?

    require( dirname( _FILE_ ) . '/../umnomequalquerqueeuseiemaisninguemsabe.php');

    ?>

    é para apagar o restante que vem por feito no configuration.php?

  10. Fabio martins

    realmente com a diga de proteção do arquivo de configuração a area administrativa não funciona

    para que com essa alteração a area administrativa venha funcionar?

  11. Parabéns pelas informações mostradas!
    Rui, temos uma empresa e economizamos muito tempo com seu post, não conhecia seu blog antes.
    Obrigado

  12. Parabéns pelas ótimas dicas!! muito bom o seu site !!!

  13. Amaral Web Designer

    Excelente post. Parabéns……

  14. sidney

    Acabei de ser invadido…e a sensação não é muito boa, para não dizer o trabalho em organizar tudo novamente…vou seguir à risca essas dicas! 

    • Olá Sidney! O Joomla é um CMS muito versátil. Tem muitas funcionalidades, especialmente com todas as extensões disponíveis. Mas, é muito inferior ao WordPress em termos de segurança. Já vi scripts WordPress com problemas de segurança. Especialmente quando não atualizados. Mas, é preciso ter muita atenção às extensões que se instalam no Joomla. Por vezes, instalamos porque gostamos da funcionalidade. É preciso verificar se tem boa reputação em termos de segurança. E se é MESMO necessária? Utilizem apenas extensões que são absolutamente necessárias. Um Abraço! Rui

  15. Valeu pela dica, mano !
    Estou começando agora e ja houve invasões no site.. felizmente tinha feito backup e consegui recuperar.. agora estou tentando deixar ele mais segura .. mas entendo pouco de php

  16. Felipe

    Muito bom o texto!

  17. Obrigado pelas dicas meu site e eh joomla e vou repassar isso ao meu programador :D

  18. Afonso

    Amigo, boa noite!

    Realmente muito boa suas dicas, entretanto como os colegas acima mencionaram, ao utilizar a dica 3, a área administrativa do joomla não funciona, o que se pode fazer? Ou essa alteração não deve ser considerada?

  19. Muito boas as dicas Rui. Apenas uma dúvida, ao renomear e mover o configuration.php de lugar funcionou tudo certinho, porém ao tentar acessar o Administrator do Joomla! ele não encontra a página. O que fazer para corrigir isso?

  20. Lineker

    Funciona para página de acesso, mas o administrador dá pau

  21. osni

    Muito bom seu artigo obrigado pelas dicas!

Participa! Comenta... para Felipe