joomla day brasil 2010: customizações para grandes portais

77
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ções que podem ser úteis

Upload: rafaelberlanda

Post on 13-May-2015

3.658 views

Category:

Technology


1 download

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

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

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

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

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

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

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 

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

1. Performance

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

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

 

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

Joomla te dárecursos:

• Configurações do cache (performance)• Configurações da sessão (+- performance)

Com usuário Super Administrator: Configuração Global > Sistema

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

Joomla te dárecursos:

Economia de banda

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

• 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

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

Gargalo de Banco de dados

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

1. Aumentodo númerode acessos

2. Aumentodo númerode buscas

3. Limpezade Session

4. DB Out…

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

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

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

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

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

MyISAM vs InnoDBMyISAM possui índices FULLTEXT e é mais rápido

para consultas

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

InnoDB MyISAMInnoDB permite multi-acessos e suporta transações

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

Tabela: Mudar para:

jos_banner InnoDB

jos_content InnoDB *

jos_session InnoDB

jos_users InnoDB

Principais alterações

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

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.

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

SELECT * FROM mysqltest.articles WHERE MATCH(title, body) AGAINST ('database article');

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

libraries/database/table/session.php

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

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.

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

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

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

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.

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

O que você fez?

Economizou recursos e consultas para montagem da sua página inicial.

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

Soluçãoextrema # 1

Utilizar 2 Servidores MySQL

Soluçãoextrema # 1

Utilizar 2 Servidores MySQL

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

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:

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

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.

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

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.

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

Implementação

1. Criar nova classe de configuração, a partir da classe principal (configuration.dboffline.php)

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

Implementação

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

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();

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

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.

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

Ei, isto não é POG!• Tudo foi instanciado e respeita a estrutura de funcionamento do Joomla

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

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

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

Gargalo de banda de transferência

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

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

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

“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

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

Para detectar problemas com banda de transferência

• Web Developer• YSlow

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

Segurança

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

Um site é seguro quando:• Impede acesso e/ou ações não autorizadas• Acesso se refere a computadores, sistemas e informações.

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

“Quando você não tem medo da madrugada de domingo”

“Você não precisa de dois aparelhos de celular”

Segurança em TI é quando...

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

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)

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

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.

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

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á. 

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

Joomla hidden secrets #1

Esconda os componentes não utilizados, desabilitando-os.

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

Joomla hidden secrets #2

Esconda as posições dos módulos: não é egoísmo, é porque dá detalhes da sua implementação.

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

Joomla hidden secrets #3

Alterar meta tag generator (não precisa informar que é o Joomla 1.5 )

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

Joomla hidden secrets #4

NUNCA use jos_ como prefixo

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

Joomla hidden secrets #5

Remova user comid = 62

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

Joomla hidden secrets #6

Renomeie o username admin

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

E por que tudo isso??

Quanto mais informação você dá, mais fácil fica para o atacante.

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

E digomais...

Altere o id e o indice de auto increment do seu primeiro usuário para um valor mais alto, do tipo 62x 

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

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.

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

E...

Não confie na boa vontade ou inocência do seus usuários

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

Hei,ACORDEM

!

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

Consultas mais seguras via php

• sprintf / sprintfv + mysql_quote.• Force o tipo: Verifique os tipos de variáveis utilizadas.• Force o method.

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

Atitude extrema # 1 Apagar pastas reset e da view de frontend de users

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

Atitude extrema # 2 Utilizar captcha para: Login de backend ou frontend,

Registro de usuários e Mensagem de contato

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

Captcha ?

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

Atitude extrema # 3 Renomear pasta administrator para outro

nome qualquer

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

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)

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

Ou mais simples:

• Colocar bloqueio na pasta, por senha. Utilizando .htaccess e ( .htpasswd )

• Desvantagem: senha visível em texto

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

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

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

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.

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

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.

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

Não há uma maneira melhor?

• Deve haver, mas assim sei exatamente o que foi alterado, e escolho se atualizo ou não.

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

Desconfie:

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

– 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:

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

– 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ê

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

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

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

O QUÊ?!!!

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

• 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…

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

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

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

Joomla hidden secrets e qualidade/SEO

Edição do robots.txt (libere a pasta images)

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

Joomla hidden secrets e qualidade/SEO

Páginas de erro mais bonitas e coerentes

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

Testes de performance - Jakarta Jmeter

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

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