Joomla Day Brasil 2010: Customizações para grandes portais
Upcoming SlideShare
Loading in...5
×
 

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

on

  • 4,194 views

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.

Statistics

Views

Total Views
4,194
Views on SlideShare
4,194
Embed Views
0

Actions

Likes
1
Downloads
146
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 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
  • 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
  • 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  
  • 1. Performance
    • 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
    •  
  • Joomla te dá recursos:
      • Configurações do cache (performance)
      • Configurações da sessão (+- performance)
      • Com usuário Super Administrator: Configuração Global > Sistema
  • Joomla te dá recursos:
      • Economia de banda
      • 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
  • Gargalo de Banco de dados
  • 1. Aumento do número de acessos 2. Aumento do número de buscas 3. Limpeza de Session 4. DB Out…
  • 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. 
  • 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
  • MyISAM vs InnoDB MyISAM possui índices FULLTEXT e é mais rápido para consultas
  • InnoDB MyISAM InnoDB permite multi-acessos e suporta transações
  • Principais alterações InnoDB jos_users InnoDB jos_session InnoDB * jos_content InnoDB jos_banner Mudar para : Tabela :
  • 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.
  • SELECT * FROM mysqltest.articles WHERE MATCH(title, body) AGAINST ('database article');
  •  
  • libraries/database/table/session.php
  • 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.
    • 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
  • 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.
  • O que você fez?
    • Economizou recursos e consultas para montagem da sua página inicial.
  • Solução extrema # 1 Utilizar 2 Servidores MySQL Solução extrema # 1 Utilizar 2 Servidores MySQL
  • 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:
  • 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 .
  • 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.
  • Implementação
    • 1. Criar nova classe de configuração, a partir da classe principal (configuration.dboffline.php)
  • Implementação
  • 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();
  •  
  • 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.
  • Ei, isto não é POG!
      • Tudo foi instanciado e respeita a estrutura de funcionamento do Joomla
  • 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
  • Gargalo de banda de transferência
  • 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
  • “ 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
  • Para detectar problemas com banda de transferência
      • Web Developer
      • YSlow
  • Segurança
  • Um site é seguro quando:
    • Impede acesso e/ou ações não autorizadas
    • Acesso se refere a computadores, sistemas e informações.
    • “ Quando você não tem medo da madrugada de domingo”
    • “ Você não precisa de dois aparelhos de celular”
    Segurança em TI é quando...
  • 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)
  • 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.
  • 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á. 
  • Joomla hidden secrets #1 Esconda os componentes não utilizados, desabilitando-os.
  • Joomla hidden secrets #2
      • Esconda as posições dos módulos: não é egoísmo, é porque dá detalhes da sua implementação.
  • Joomla hidden secrets #3
      • Alterar meta tag generator (não precisa informar que é o Joomla 1.5 )
  • Joomla hidden secrets #4
      • NUNCA use jos_ como prefixo
  • Joomla hidden secrets #5
      • Remova user com
      • id = 62
  • Joomla hidden secrets #6 Renomeie o username admin
  • E por que tudo isso??
      • Quanto mais informação você dá, mais fácil fica para o atacante.
  • 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  
  • 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 .
  • E... Não confie na boa vontade ou inocência do seus usuários
  • Hei, ACORDEM!
  • Consultas mais seguras via php
      • sprintf / sprintfv + mysql_quote.
      • Force o tipo: Verifique os tipos de variáveis utilizadas.
      • Force o method .
  • Atitude extrema # 1 Apagar pastas reset e da view de frontend de users
  • Atitude extrema # 2 Utilizar captcha para: Login de backend ou frontend, Registro de usuários e Mensagem de contato
  • Captcha ?
  • Atitude extrema # 3 Renomear pasta administrator para outro nome qualquer
  • 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)
  • Ou mais simples:
    • Colocar bloqueio na pasta, por senha. Utilizando .htaccess e ( .htpasswd )
    • Desvantagem: senha visível em texto
  • 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
  • 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.
  • 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.
  • Não há uma maneira melhor?
      • Deve haver, mas assim sei exatamente o que foi alterado, e escolho se atualizo ou não.
  • Desconfie:
      • 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:
      • 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ê
  • 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
  • O QUÊ?!!!
      • 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…
  • 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
  • Joomla hidden secrets e qualidade/SEO
      • Edição do robots.txt (libere a pasta images)
  • Joomla hidden secrets e qualidade/SEO
      • Páginas de erro mais bonitas e coerentes
  • Testes de performance
    • - Jakarta Jmeter
  • 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