Joomla Day Brasil 2010: Customizações para grandes portais

  • 3,607 views
Uploaded on

Apresentação no Joomla Day Brasil sobre possíveis customizações sobre segurança, desempenho e boas práticas, indicadas para Portais de grande porte.

Apresentação no Joomla Day Brasil sobre possíveis customizações sobre segurança, desempenho e boas práticas, indicadas para Portais de grande porte.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
3,607
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
148
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Customizações para grandes Portais Rafael Berlanda Membro da Comunidade Joomla Calango Joomla Day Brasil 2010 imitação de capa de um livro da Pckt Publishing, realizada sem motivo aparente  Miscelânea de adaptações que podem ser úteis
  • 2. Quem?
    • Rafael Berlanda
    • Atuando no Ministério da Educação
    • desde 2007 e trabalhando com
    • Web desde 2001.
    •   
      • Joomla desde 2007:
        • Layout da versão  anterior do Portal do MEC
        • Analista de Sistemas e Desenvolvedor Joomla
        • Desenvolvedor do Portal CNJ entregue em 2009
  • 3. Estrutura desta apresentação
      • Performance
      • Segurança
      • Outros requisitos
      • dia-a-dia e sugestões
    •  
      • Possui conceitos básicos até experimentações realizadas nos projetos dentro e fora do ambiente de trabalho, fruto da colaboração de várias pessoas
      • Versão de referência: Joomla > 1.5.10  
  • 4. 1. Performance
  • 5.
    • No contexto de TI, significa prover mais serviços com os mesmos, ou com menos recursos.
    • Para sites, portanto, prevê:
      • Abertura e resposta mais rápida dos sites
      • Economia de banda de transferência
      • Suporte a diversas conexões simultâneas
    •  
  • 6. Joomla te dá recursos:
      • Configurações do cache (performance)
      • Configurações da sessão (+- performance)
      • Com usuário Super Administrator: Configuração Global > Sistema
  • 7. Joomla te dá recursos:
      • Economia de banda
  • 8.
      • Nem todos os componentes funcionam bem com cache: há possibilidade de ocorrência de erros de charset nas entradas de dados realizadas através destes componentes
      • Nem todos os módulos suportam cache (há a opção de escolher para qual utilizar ou não, na maioria dos casos)
      • Não há publicação em tempo real, a partir do momento em que você utiliza cache
      • Até onde a compressão gzip pode afetar a performance ?
    Desvantagens
  • 9. Gargalo de Banco de dados
  • 10. 1. Aumento do número de acessos 2. Aumento do número de buscas 3. Limpeza de Session 4. DB Out…
  • 11. O pesadelo Todos entram ao mesmo tempo no seu site e ele começa a ficar lento... então as pessoas começam a utilizar o sistema de busca para chegar mais rapidamente à informação que não encontram... e daí as coisas pioram... as consultas começam a engargalar... a sessão termina e o banco de dados dispara deletes ao meio de consultas complexas, e então o servidor cai. 
  • 12. Causas
      • Tabelas MyISAM quando deveriam ser InnoDB; MySQL e as consultas em índices FULLTEXT;
      • O purge de session;
      • Consultas desnecessárias na página inicial
  • 13. MyISAM vs InnoDB MyISAM possui índices FULLTEXT e é mais rápido para consultas
  • 14. InnoDB MyISAM InnoDB permite multi-acessos e suporta transações
  • 15. Principais alterações InnoDB jos_users InnoDB jos_session InnoDB * jos_content InnoDB jos_banner Mudar para : Tabela :
  • 16. Se consultas de busca utilizam os índices FULLTEXT das tabelas MyISAM, não se pode mudar para InnoDB Utilizar tabela espelho ou replicação de banco de dados.
  • 17. SELECT * FROM mysqltest.articles WHERE MATCH(title, body) AGAINST ('database article');
  • 18.  
  • 19. libraries/database/table/session.php
  • 20. Queries da página inicial
    • Se sua página inicial é totalmente modular, e o link padrão para a página inicial ainda é:
    • index.php?option=com_content&view=frontpage
    • Então as consultas de montagem do conteúdo de artigos de página inicial são desnecessárias.
    • E não basta desmarcar todos os itens para a página principal.
  • 21.
    • Abrir:
    • components/com_content/views/frontpage/view.html.php
    • Comentar da linha 33 à 96.
    • E acrescentar:
        • //ALTERACAO BERLANDA
        • $total = NULL;
        • $user = NULL;
        • $access = NULL;
        • $params = NULL;
        • $items = NULL;
        • //FIM ALTERACAO
  • 22. How to
    • Abrir:
    • components/com_content/views/frontpage/tmpl/default.php
    • ou arquivo do template: (templates/XXXX/html/com_content/frontpage/default.php)
    • Abrir arquivo e deixá-lo em branco.
    • OU, para ficar bonito:
    • Criar componente com view=frontpage
    • e deixar tmpl em branco.
  • 23. O que você fez?
    • Economizou recursos e consultas para montagem da sua página inicial.
  • 24. Solução extrema # 1 Utilizar 2 Servidores MySQL Solução extrema # 1 Utilizar 2 Servidores MySQL
  • 25. Solução extrema #1
    • Dois bancos MySQL sincronizados, onde:
        • O usuário de acesso do master possui permissões de SELECT, INSERT, UPDATE, DELETE.
        • O usuário de acesso do " slave " possui somente permissão de SELECT.
        •   As consultas complexas ficam a cargo do slave enquanto as consultas de rotina ficam a cargo do servidor master .
    Oficial: http://dev.mysql.com/doc/refman/4.1/pt/replication.html Não oficial: http://www.dicas-l.com.br/arquivo/replicacao_de_mysql.php Mais informações em:
  • 26. Solução extrema #1 - Vantagens
      • Se o slave fica lento devido às consultas complexas, o master não é afetado, ou seja, sua página inicial fica preservada.
      • Backup em tempo real, em caso de problemas físicos com o servidor master .
  • 27. Solução extrema #1 - Desvantagens
      • Necessária verificação do status de sincronia. Caso ela se perca, a busca ou outros serviços que recorram ao servidor slave mostrarão dados desatualizados.
  • 28. Implementação
    • 1. Criar nova classe de configuração, a partir da classe principal (configuration.dboffline.php)
  • 29. Implementação
  • 30. Implementação
    • 1. Criar nova classe de configuração, a partir da classe principal
    • 2. Criar um novo construtor de configuração na Factory do Joomla ( libraries/joomla/factory.php )
    • 3. Criar um novo construtor da classe de banco de dados
    • 4. "Instanciar" sempre que necessário e voilá
    • Ao invés de:
      • $db =& JFactory::getDBO();
      • Mudar para:
    •  
      • $db =& JFactory::getDBoffline();
  • 31.  
  • 32. Como detectar quais consultas devem ser apontadas para o novo objeto ?
    • 1. Solicitar o log de queries lentas do seu servidor MySQL.
    • 2. Filtre e organize-as por ordem, do maior tempo de execução para o menor, e depois do maior número de ocorrências para o menor número.
    • 3. Ligar a depuração do sistema e identificar em qual página/módulo/componente a consulta é realizada, caso haja dificuldades em identificar onde a query lenta está sendo realizada.
  • 33. Ei, isto não é POG!
      • Tudo foi instanciado e respeita a estrutura de funcionamento do Joomla
  • 34. Gargalos de aplicação
    • "Mesmo assim, o site ainda está lento..."
    Solução extrema 1: utilização de balanceador de carga juntamente com 2 ou mais servidores de aplicação espelhados Solução extrema 2: Proxy reverso
  • 35. Gargalo de banda de transferência
  • 36. Gargalos de banda de transferência
      • Bola de neve: 1 Kb se torna vários megabytes .
      • Mais de um framework javascript: mootools do Joomla + jquery
      • Várias áreas de banners
      • Vários arquivos css
      • Vários arquivos javascript
      • Template pronto
  • 37. “ Banda não é capim”
      • Forneça a informação mais útil naquele momento mais rapidamente que as demais
      • Crie uma política de dimensões e peso limites para imagens nos sites e feche um acordo com os publicadores de conteúdo
      • Se ninguém te contou, png (8 bits) é melhor que gif, para imagens com dimensões superiores a 35 x 35 pixels . 1 Kb para 1000 usuários ~= 1Mb
      • Se ninguém te contou, templates prontos costumam ser mais pesados porque em geral possuem mais do que você precisa.
      • Se você ficar obcecado: utilize seletores e propriedades css na mesma linha, sem quebras de linha entre as propriedades ou comentários
  • 38. Para detectar problemas com banda de transferência
      • Web Developer
      • YSlow
  • 39. Segurança
  • 40. Um site é seguro quando:
    • Impede acesso e/ou ações não autorizadas
    • Acesso se refere a computadores, sistemas e informações.
  • 41.
    • “ Quando você não tem medo da madrugada de domingo”
    • “ Você não precisa de dois aparelhos de celular”
    Segurança em TI é quando...
  • 42. Problemas comuns de segurança de portais em Joomla
      • SQL Injection
        • Alterações no banco
        • Obtenção de dados
      •   Falhas humanas
        • Senhas fáceis de quebrar
        • Permissões de pasta muito altas
        • Falta de política de upload em pastas
      • Código mal programado
      • (de terceiros)
  • 43. O que o Joomla te oferece?
      • htaccess
      • SEMPRE renomeie de htaccess.txt para .htaccess
      • O Joomla sem .htaccess é pouco seguro.
      • Ele bloqueia os SQL injections mais comuns
      • Ele bloqueia acesso aos arquivos xml de instalação de componentes e módulos ( Brian Teeman )
      • Permite URLs amigáveis sem que "index.php" tenha que aparecer no meio das mesmas.
  • 44. Para começar:
      • Joomla Hidden Secrets - Brian Teeman
      • A partir desta apresentação o bloqueio dos arquivos xml passou a ser padrão para o Joomla 1.5 .
      • Impede acesso a informações do seu Joomla (fica difícil até saber se é Joomla)
      • Regra de qualidade e segurança n.1 do profissional em Joomla: nada aparece (ou permanece) em meu site que eu não tenha colocado lá. 
  • 45. Joomla hidden secrets #1 Esconda os componentes não utilizados, desabilitando-os.
  • 46. Joomla hidden secrets #2
      • Esconda as posições dos módulos: não é egoísmo, é porque dá detalhes da sua implementação.
  • 47. Joomla hidden secrets #3
      • Alterar meta tag generator (não precisa informar que é o Joomla 1.5 )
  • 48. Joomla hidden secrets #4
      • NUNCA use jos_ como prefixo
  • 49. Joomla hidden secrets #5
      • Remova user com
      • id = 62
  • 50. Joomla hidden secrets #6 Renomeie o username admin
  • 51. E por que tudo isso??
      • Quanto mais informação você dá, mais fácil fica para o atacante.
  • 52. E digo mais... Altere o id e o indice de auto increment do seu primeiro usuário para um valor mais alto, do tipo 62 x  
  • 53. Para mim, cada qual tem sua função: backend e frontend
        • Remover botão de editar artigos no frontend
        • Remover task relacionada
        • Remover com_media de frontend .
  • 54. E... Não confie na boa vontade ou inocência do seus usuários
  • 55. Hei, ACORDEM!
  • 56. Consultas mais seguras via php
      • sprintf / sprintfv + mysql_quote.
      • Force o tipo: Verifique os tipos de variáveis utilizadas.
      • Force o method .
  • 57. Atitude extrema # 1 Apagar pastas reset e da view de frontend de users
  • 58. Atitude extrema # 2 Utilizar captcha para: Login de backend ou frontend, Registro de usuários e Mensagem de contato
  • 59. Captcha ?
  • 60. Atitude extrema # 3 Renomear pasta administrator para outro nome qualquer
  • 61. Atitude extrema #3
      • Renomear pasta do administrator :
        • O Joomla é composto de 3 aplicações distintas: administrator, xmlrpc e frontend .
        • Alterar constantes no arquivo includes/defines.php
        • Alterar arquivos xml.
        • Alterar application.php
      • Componente mais chato de adaptar que vi até hoje: Acajoom (módulo e componente de frontend)
  • 62. Ou mais simples:
    • Colocar bloqueio na pasta, por senha. Utilizando .htaccess e ( .htpasswd )
    • Desvantagem: senha visível em texto
  • 63. Outros requisitos e customizações
      • XHTML tableless
      • Porquê:
        • Facilita implementações de acessibilidade, no que tange a governo
        • Seu código fica de indexação mais fácil pelos robôs de busca, no que tange a empresas
        • Fica mais fácil implementar versões mobile
  • 64. Tire o Joomla do pedestal
      • O core da ferramenta não é intocável
      • Não tenha medo de customizar seu Joomla, mas quanto mais você altera, maior sua responsabilidade.
      • E as atualizações? Ainda são possíveis.
  • 65. Dia-a-dia e sugestões
    • Depois de alterar seu joomla e criar uma versão sua, como atualizar a versão:
      • 1.5.X para 1.5.X++ : Winmerge , cópia original da versão que você utiliza, + seu site, + pacote de atualização e, paciência oriental.
      • Comparar o que você tem com o pacote original, para obter a lista que você alterou em relação ao original.
      • Atualizar os arquivos/pastas que não estão presentes na lista gerada.
      • Arquivos da lista: abrir arquivo por arquivo e copiar/alterar o arquivo que tiver sido atualizado.
      • Teste o software, você verá que ele facilitará bastante o trabalho.
  • 66. Não há uma maneira melhor?
      • Deve haver, mas assim sei exatamente o que foi alterado, e escolho se atualizo ou não.
  • 67. Desconfie:
  • 68.
      • Cuidado com o componente faz tudo.
      • Infelizmente não consigo testar todos os componentes da comunidade que existem neste sentido, contudo, quem trabalha com portais, precisa ter uma característica: desconfiança.
      • O que você faz, mesmo que não seja a melhor solução, é criação sua e você sabe exatamente onde alterar, em caso de problemas.
    Desconfie:
  • 69.
      • Não dá para culpar os desenvolvedores da comunidade em caso de bug ou falha de segurança, a culpa é sua.
    Em caso de erro, o culpado será você
  • 70. Ainda sobre desconfiança
      • Posso apanhar aqui, maasss:
      • Espere pelo menos 6 meses antes de atualizar seu site de maior porte para a versão 1.6
  • 71. O QUÊ?!!!
  • 72.
      • Versão estável não quer dizer versão madura
      • O Joomla 1.5 teve problemas de segurança importantes até a versão 1.5.9 (nada que não pudesse ser contornado com os cuidados mencionados sobre remoção de pastas e usuários)
    Sim, isso mesmo…
  • 73. Não faça seu usuário ter antipatia pelo Joomla
      • Implemente facilidades e atalhos
      • A solução se adapta à necessidade do usuário e não é o usuário que se adapta à necessidade da solução
      • Mas... treine seus usuários
  • 74. Joomla hidden secrets e qualidade/SEO
      • Edição do robots.txt (libere a pasta images)
  • 75. Joomla hidden secrets e qualidade/SEO
      • Páginas de erro mais bonitas e coerentes
  • 76. Testes de performance
    • - Jakarta Jmeter
  • 77. Perguntas / Feedback
        • E agradecimentos
        • Equipe web e equipe de banco de dados do Ministério da Educação
        • Organização do Joomla Day
        • Daniel Leandro. Brasal
        • Julio Pontes. Noix
      • Obrigado!
    rafaelberlanda@gmail.com @berlanda