A visualizar apenas posts com a tag wordpress

Até agora se quiséssemos usar o PHP 5.5 com o WordPress tínhamos um festival de erros se não fosse usado um plug-in que permitisse o acesso ao MySQL por mysqli ou PDO. Com o WordPress 3.9 isso acabou.

Wordpress

Agora passa a ser possível usar PHP 5.5 com o WordPress 3.9, uma vez que passa a ser usado o mysqli quando as funções mysql não estão disponíveis.

O ideal seria a opção pelo PDO para que no futuro se possa migrar facilmente para MariaDB, Percona, ou MongoDB. Desta forma já passa a ser possível utilizar a última versão do PHP e até ver são raros os plug-ins que continuam a aceder directamente ao MySQL sem usar o wpdb do WordPress.

Várias instalações de WordPress, principalmente aquelas desactualizadas, têm sido alvo de ataques de brute-force para tentar o acesso à área de administração.

Aqui ficam algumas dicas para bloquear este tipo de ataques.

Wordpress

O ponto principal em termos de segurança é manter a instalação do WordPress sempre actualizada na última versão, assim como qualquer tema ou plug-in. As actualizações vão corrigindo várias falhas de segurança que podem ser usadas por terceiros para injectar código no vosso blog com base no WordPress.

A última vaga de ataques tem vindo a ser detectada ao ficheiro wp-login.php, que permite o acesso à área de administração. Se ainda não o fizeram devem mudar o nome de utilizador de admin para outro qualquer, conforme expliquei neste artigo.

Depois devem definir uma palavra-passe segura. Isto evita que sejam facilmente atacados, mas não resolve o problema.

Bloquear pedidos ao wp-login.php

Existem plug-ins que bloqueiam IP’s quando são efectuados vários acessos com dados errados. O problema é que estes recentes ataques usam botnets extensas (mais de 20.000 IP’s) e apenas fazem um pedido por IP, e cada pedido que fazem usa processamento de PHP e MySQL. Com vários pedidos em simultâneo é fácil arrasar um servidor.

A solução é bloquear o acesso ao ficheiro wp-login.php. Podemos depois permitir o acesso apenas a partir do nosso IP, basta adicionar o seguinte código no topo do ficheiro .htaccess

1
2
3
4
5
<Files wp-login.php>
    Order Deny,Allow
    Deny from all
    Allow from 123.45.67.89
</Files>

Claro que nem sempre é possível ter um endereço de IP fixo, e estar a verificar o IP da ligação e fazer novo upload do ficheiro .htaccess não é prático.

Uma alternativa é instalar um plugin que permita enviar headers personalizados por site no Chrome ou Firefox (ex: Modify Header Value, HTTP Headers, etc) e filtrar o acesso pelo mesmo. Podemos criar um header HTTP com o nome “X-Access-allowed” por exemplo e o valor 9f0aeab30a531755c4e8.

Depois basta adicionar o seguinte código no topo do ficheiro .htaccess

1
2
3
4
5
6
<Files wp-login.php>
    SetEnvIfNoCase X-Access-allowed "9f0aeab30a531755c4e8" AllowedAccess
    Order Deny,Allow
    Deny from all
    Allow from env=AllowedAccess
</Files>

Desta forma apenas um browser com este header irá conseguir aceder à página de login do WordPress. Atenção que, para este método ser seguro, devem existir algumas precauções. O valor do header deve ser complexo e aleatório e deve ser usado apenas para acesso ao WordPress. O mesmo se aplica ao nome do header, usem um valor diferente de “X-Access-allowed”.

Também é possível fazer o mesmo com o User-Agent mas este fica associado aos logs de acesso, mesmo através do Google Analytics, e pode ser usado para permitir acesso.

Com este bloqueio estamos a adicionar mais uma camada de segurança, tornando a instalação do WordPress mais segura.

Bloquear o acesso à pasta wp-admin

Podemos também bloquear totalmente o acesso à pasta wp-admin, é no entanto necessário confirmar se não existe nenhum plug-in ou tema dependente do ficheiro admin-ajax.php.

Vamos assim criar um ficheiro .htaccess dentro da pasta wp-admin e adicionar o seguinte código:

1
2
3
Order Deny,Allow
Deny from all
Allow from 123.45.67.89

Se quisermos bloquear o acesso através do header o código deverá ser o seguinte:

1
2
3
4
SetEnvIfNoCase X-Access-allowed "9f0aeab30a531755c4e8" AllowedAccess
Order Deny,Allow
Deny from all
Allow from env=AllowedAccess

Com estes bloqueios os ataques por brute-force ao WordPress são praticamente impossíveis, aumentando bastante a segurança e reduzindo os recursos do servidor utilizados por ataques de botnets.

Sempre que faço uma instalação do WordPress, seja para utilizar como blog ou CMS existem sempre 5 plug-ins que nunca falham e estão presentes em todas as instalações. Para mim são plugins essenciais, não os dispenso em nenhuma instalação e tornam o WordPress numa ferramenta poderosa, eficaz e segura.

Wordpress Plugin

1) WordPress Database Backup
A segurança é essencial nos dias que correm, nem todos temos acessos a servidores seguros e devidamente mantidos, e mesmo com todas as precauções nunca sabemos quando o azar nos bate à porta.
Fazer backups é uma tarefa chata e muitas vezes esquecemos-nos de os fazer. Este plugin é óptimo porque permite programar um backup diário ou semanal e receber uma cópia da nossa base de dados comodamente no nosso email.

2) WP-Optimize
Ainda na segurança do WordPress, o primeiro plugin que instalo e utilizo é o WP-Optimize por permitir mudar o nome de utilizador facilmente sem ter que recorrer directamente à base de dados. Claro que não o instalo só por essa funcionalidade, pois também permite remover os comentários marcados como spam ou as revisões de posts e ainda optimizar a base de dados, recuperando bastante espaço perdido com lixo e tornando a base de dados mais rápida.

3) Hyper Cache
O Hyper Cache é um daqueles plugins que quem não usa nem sabe o que perde. Um sistema de cache que poupa recursos do servidor e ainda torna o WordPress mais rápido, até permite compressão Gzip. É para mim o melhor sistema de cache do WordPress e o único que conseguiu realmente reduzir a carga no meu servidor a longo prazo.

4) All in One SEO Pack
Ter a opção de alterar a forma como os títulos são apresentados pelo WordPress, poder definir títulos, descrições e keywords por posts é indispensável para mim. É um plugin de SEO simples de usar e bastante completo.

5) Google XML Sitemaps
O Google XML Sitemaps além de gerar um sitemap automaticamente sempre que se publica um novo post ainda permite notificar os motores de busca que suportam aquele protocolo (Google, Bing/MSN, Yahoo, Ask) permitindo uma indexação rápida e eficaz de um blog. As várias opções permitem ainda retirar páginas que não interessam de um sitemap como as categorias ou os arquivos.

Continuando a série do guia de optimização do WordPress, irei agora falar sobre a optimização da base de dados com a redução do espaço utilizado por esta, assim como uma alteração que permite aumentar consideravelmente a segurança do WordPress, tudo com recurso a apenas um plug-in.

Wordpress

Esse plugin “maravilha” é o WP-Optimize. É fácil de utilizar e totalmente seguro para os utilizadores mais inexperientes que não se sentem à vontade em trabalhar directamente com a base de dados através do phpMyAdmin por exemplo.

Optimização da base de dados
O plugin permite facilmente eliminar as revisões de posts, os comentários marcados como spam e optimizar a base de dados. No final o plugin ainda nos indica quanto espaço conseguimos recuperar. Efectuar esta operação regularmente não só vai manter a base de dados do blog mais rápida como vai também poupar espaço limpando algum “lixo” que vai ficando para trás, especialmente agora que as revisões de posts passaram a ser guardadas automaticamente.

Ora, e se escrevermos os nossos posts fora do WordPress ou não tivermos utilidade para a função das revisões de posts podemos desactivá-la, alterando o ficheiro wp-config.php que se encontra na raiz do nosso blog, adicionando a seguinte linha:

1
define('WP_POST_REVISIONS', false);

Desta forma as revisões dos posts não serão guardadas, no entanto a opção de auto-save do WordPress continuará activa e o trabalho ficará salvaguardado.

 

Segurança
Quase que aposto que o vosso login para aceder ao painel de controlo do WordPress é admin. Acertei? Isto é uma falha de segurança pois torna os possíveis ataques ao blog mais fáceis.

Ora, o WP-Optimize permite mudar o nome de utilizador do WordPress para outra coisa qualquer. Basta em Old username colocar admin e em New username colocar o nome desejado. Até pode ser “Zé Manel do Blog”. Juntando isso a uma password forte, com números, letras e símbolos e conseguimos assim ter uma instalação de WordPress com um nível de segurança acima da média.

Continuando a série do guia de optimização do WordPress, irei agora falar um pouco sobre os sistemas de caching. Um sistema de cache guarda uma cópia de uma página que normalmente é processada em tempo real pelo servidor antes de ser enviada para o utilizador tornando o acesso muito mais rápido ao blog e poupando recursos no servidor.

Wordpress

Existem vários plugins de cache para o WordPress, os 3 mais usados são o WP Super Cache, o Hyper Cache e o WP-Cache, mas este último já não é actualizado desde 2007.

Testei os 3 plugins quer localmente quer num servidor de produção com benchmarks e análise de tráfego real e o que obteve resultados mais satisfatórios a longo prazo foi o Hyper Cache e é nele que me vou basear para este guia.

A grande vantagem do Hyper Cache sobre o WP Super Cache é a possibilidade de desactivar o chamado “garbage clean” ou “autoclean” e definir um tempo de vida do cache ilimitado, assim apenas quando publicamos um novo post ou aceitamos um comentário é que algumas páginas em cache são eliminadas, ao contrário do WP Super Cache que possuia um processo que corria a cada 10 minutos para verificar se existiam páginas em cache expiradas e fazia a sua eliminação.

Atenção! Antes de efectuar qualquer destas alterações é altamente aconselhável efectuar um backup para poder ser reposto caso ocorra algum erro.

 

Hyper Cache

Após instalar o plugin Hyper Cache necessitamos de alterar o ficheiro wp-config.php que se encontra na raiz do nosso blog e adicionar a seguinte linha de código:

1
define('WP_CACHE', true);

Agora podemos activar o plugin e passar à sua configuração. Pessoalmente, e baseado nos testes que efectuei, passo a explicar a configuração mais eficaz

Opções seleccionadas
As opções a activar são Enable compression, Disk space usage e Redirect caching.

A opção Enable compression e Disk space usage são sempre activadas em conjunto, o que isto faz é comprimir a página em disco e serve a página directamente já comprimida. Isto não só poupa recursos no servidor como reduz o tamanho da página entre 60% a 70% e torna o acesso muito mais rápido. Esta opção no entanto não funciona quando temos login efectuado, portanto o método mais eficaz de verificar as diferenças de velocidade no acesso é fazer logout ou usar um browser alternativo.

A opção Redirect caching guarda em cache os redireccionamentos que o WordPress faz para as páginas que não existem, dando o erro HTTP 404.

Dados de configuração
Em Cached pages timeout e Cache autoclean indicamos o valor 0 (zero). Tal como expliquei anteriormente, as páginas assim ficam em cache até serem modificadas, poupando recursos no servidor sem qualquer alteração na experiência do utilizador.

Em Cache invalidation mode escolhemos a opção Only modified posts, seleccionando a opção em baixo Invalidate home, archives, categories on single post invalidation. Com estas opções ao colocarmos um novo post, editarmos um post existente ou um comentário a cache desse post, assim como a cache dos arquivos, categoria e homepage serão eliminados e recriados novamente com os dados actualizados.

 

E agora que o plugin está devidamente configurado podemos relaxar e observar os óptimos resultados, tudo o resto será efectuado automaticamente. Reparem apenas que a cache de um blog é feita consoante os acessos efectuados ao site e este não é colocado totalmente em cache de imediato. Podem verificar este comportamento acedendo através de um browser alternativo a várias páginas e verificando o contador de páginas em cache do Hyper Cache.

O WordPress é, para mim e para muitos, a melhor plataforma para se criar um blog. É fácil de utilizar, tem um interface limpo e é bastante modular permitindo usar um sem fim de plug-ins. No entanto isto tem um preço e o WordPress não é propriamente meigo a usar recursos e isto prejudica o desempenho de um blog. Mas é fácil melhorar a performance do seu blog equivalente a um pequeno utilitário para algo semelhante a um desportivo com um V8 debaixo do capot. Para ajudar nessa tarefa irei escrever uma série de guias para optimizar o WordPress ao máximo.

Wordpress

Atenção! Antes de efectuar qualquer destas alterações é altamente aconselhável efectuar um backup para poder ser reposto caso ocorra algum erro.

Tags estáticos

Dentro da pasta do nosso tema vamos abrir o ficheiro header.php. Este ficheiro possui, além do cabeçalho, vários meta-tags de informação sobre o nosso site. Como os temas são feitos para serem compatíveis com um variado número de instalações efectuam chamadas à base de dados para indicar atributos básicos como a codificação do nosso site. Como estes atributos não são alterados durante a utilização do blog podemos colocar o seu valor directamente no blog.

Vamos entrar então no nosso blog, verificar o seu código fonte e procurar a seguinte linha:

1
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Agora dentro do nosso ficheiro header.php vamos usar a linha que copiamos em cima para substituir a seguinte:

1
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

Podemos fazer a mesma coisa para o ficheiro CSS, entramos no blog, verificamos o código fonte e procuramos a seguinte linha:

1
<link rel="stylesheet" href="http://dominio.com/wp-content/themes/xpto/style.css" type="text/css" media="screen" />

Novamente, no nosso ficheiro header.php vamos usar a linha que copiamos em cima para substituir a seguinte:

1
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css" media="screen" />

Headers do WordPress

O WordPress, por defeito, coloca vários headers como a versão do WordPress, os links RSD entre outro “lixo” que muitos de nós não usamos ou nem sabemos para que servem. Aconselho a seguirem os próximos passos em modo trial and error, pois cada instalação é diferente e podem desactivar algo que necessitem para que o vosso blog ou tema funcione correctamente.

Estas alterações são efectuadas no ficheiro header.php e não no ficheiro functions.php do tema porque não queremos desactivar o jQuery na área de administração do WordPress, assim como outras funcionalidades.

Vamos então continuar a trabalhar no nosso ficheiro header.php e vamos procurar a seguinte linha:

1
<?php wp_head(); ?>

Todo o código indicado a seguir deve ser aplicado antes da função wp_head(). Para os que não estão familiarizados com o PHP o código deve encontra-se no ficheiro da seguinte maneira:

1
2
3
4
<?php
  // Código copiado é inserido nesta linha
  wp_head();
?>

jQuery e outros ficheiros JS

O jQuery é uma biblioteca de Javascript que ocupa cerca de 57Kb e que muitas vezes é incluída sem necessidade só porque activamos um plug-in mas não usamos o widget fornecido com esse plug-in. Para remover o ficheiro jQuery aplicamos a seguinte linha:

1
wp_deregister_script('jquery');

A partir da versão 3.1 passou a ser também incluído um ficheiro de localização (internacionalização) em JS. Podemos desactivar o mesmo com a seguinte linha:

1
wp_deregister_script('l10n');

Feed do blog

Tal como anteriormente fizemos nos tags estáticos, podemos inserir manualmente o link para o feed RSS do
nosso blog. Basta procurar a seguinte linha:

1
<link rel="alternate" type="application/rss+xml" title="Blog RSS Feed" href="http://blog.com/feed/" />

Agora basta colocá-la entre as tags <head>, por baixo da linha do CSS por exemplo. Depois colocamos a seguinte linha de código antes da função wp_head():

1
automatic_feed_links(false);

Podemos aproveitar também para remover os feeds extra de comentários, categorias e tags com o seguinte código:

1
remove_action('wp_head', 'feed_links_extra');

Serviços de publicação externa

Se apenas publicamos posts directamente através do painel de controlo do WordPress então podemos desactivar com segurança o link para o serviço RSD e o manifesto do Windows Live Writer com o seguinte código:

1
2
remove_action('wp_head', 'rsd_link');
remove_action('wp_head', 'wlwmanifest_link');

Versão do WordPress

Esta tag deveria ser removida por defeito pois expõe a versão instalada do WordPress e em versões antigas pode permitir explorar possíveis falhas de segurança.

1
remove_action('wp_head', 'wp_generator');

Links de navegação

Deixo ao vosso inteiro critério a opção de remover ou não os links de navegação. Podem ser úteis para os utilizadores do Opera que usam essa funcionalidade ou para utilizadores com dificuldades para navegação mais simples, no entanto alguns links como os de arquivo podem ser extensos e aumentar ligeiramente o tamanho do blog.

1
2
3
4
5
6
remove_action('wp_head', 'index_rel_link');
remove_action('wp_head', 'parent_post_rel_link');
remove_action('wp_head', 'start_post_rel_link');
remove_action('wp_head', 'adjacent_posts_rel_link');
remove_action('wp_head', 'wp_get_archives');
remove_action('wp_head', 'wp_shortlink_wp_head');

 

Com estas pequenas alterações já será possível melhorar, ainda que ligeiramente, o desempenho do vosso WordPress.

 
Copyright © 1985 - 2017 Eduardo Maio. Alguns direitos reservados.
eduardomaio.net - Às vezes mais valia ser Agricultor do que Programador
Ao navegar no blog eduardomaio.net está a concordar com os termos legais e de privacidade.