joomla day brasil 2010: customizações para grandes portais
DESCRIPTION
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.TRANSCRIPT
Customizações para grandes Portais
Joomla Day Brasil 2010 imitação de capa de um livro da Pckt Publishing, realizada sem motivo aparente
Rafael Berlanda Membro da Comunidade Joomla Calango
Miscelânea de adaptaçõesque podem ser úteis
Quem?
Rafael Berlanda
Atuando no Ministério da Educaçãodesde 2007 e trabalhando comWeb desde 2001. • Joomla desde 2007:
• Layout da versão anterior do Portal do MEC
• Analista de Sistemas eDesenvolvedor Joomla
• Desenvolvedor do Portal CNJentregue 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ê:
1. Abertura e resposta mais rápida dos sites2. Economia de banda de transferência
3. 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. Aumentodo númerode acessos
2. Aumentodo númerode buscas
3. Limpezade Session
4. DB Out…
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.
O pesadelo
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 InnoDBMyISAM possui índices FULLTEXT e é mais rápido
para consultas
InnoDB MyISAMInnoDB permite multi-acessos e suporta transações
Tabela: Mudar para:
jos_banner InnoDB
jos_content InnoDB *
jos_session InnoDB
jos_users InnoDB
Principais alterações
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çãoextrema # 1
Utilizar 2 Servidores MySQL
Soluçãoextrema # 1
Utilizar 2 Servidores MySQL
Solução extrema #1
Dois bancos MySQL sincronizados, onde:
1.O usuário de acesso do master possui permissões de SELECT, INSERT, UPDATE, DELETE.
2.O usuário de acesso do "slave" possui somente permissão de SELECT.
3. 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 dados4. "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”
1. Forneça a informação mais útil naquele momento mais rapidamente que as demais
2. Crie uma política de dimensões e peso limites para imagens nos sites e feche um acordo com os publicadores de conteúdo
3. 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
4. Se ninguém te contou, templates prontos costumam ser mais pesados porque em geral possuem mais do que você precisa.
5. 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
o SQL Injection Alterações no banco Obtenção de dados
o 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 comid = 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 digomais...
Altere o id e o indice de auto increment do seu primeiro usuário para um valor mais alto, do tipo 62x
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 :1.O Joomla é composto de 3 aplicações distintas:
administrator, xmlrpc e frontend. 2.Alterar constantes no arquivo includes/defines.php3.Alterar arquivos xml.4.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ê:
1.Facilita implementações de acessibilidade, no que tange a governo
2.Seu código fica de indexação mais fácil pelos robôs de busca, no que tange a empresas
3.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. 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.
2. Comparar o que você tem com o pacote original, para obter a lista que você alterou em relação ao original.
3. Atualizar os arquivos/pastas que não estão presentes na lista gerada.
4. Arquivos da lista: abrir arquivo por arquivo e copiar/alterar o arquivo que tiver sido atualizado.
5. 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 quenão seja a melhor solução,é criação sua e você sabeexatamente 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 agradecimentosEquipe web e equipe de banco de dados
do Ministério da Educação 1. Organização do Joomla Day2. Daniel Leandro. Brasal3. Julio Pontes. Noix
Obrigado!
[email protected] @berlanda