Filosofia
Ao descobrir ou ser informada de uma “brecha” de segurança, a equipa de desenvolvimento do SPIP procura corrigir o problema o mais rapidamente possível na sua versão de desenvolvimento e nas suas versões estáveis, para deixar de distribuir 0 código defeituoso.
No entanto, a maioria dos utilizadores nem sempre tem tempo ou possibilidade de atualizar e tende a avaliar os prós e os contras contra o risco de ter, mesmo durante uma atualização mínima, incompatibilidades ou discrepâncias com o código testado e validado a rodar on-line.
Para um host, a informação relativa a um problema de segurança tem também dois gumes: por um lado não quer deixar um "buraco" num dos seus sites alojados, por outro lado nem sempre tem permissão para modificar os sites. E colocá-los offline geralmente não é uma opção, exceto com hosts baratos ou paranóicos.
O filtro de segurança existe para resolver esse problema. Este é um ficheiro php único e separado do SPIP, que pode ser atualizado independentemente do restante código e é compatível com todas as versões do SPIP, mesmo as mais antigas.
Este ficheiro não substitui uma atualização real da sua versão do SPIP, mas pode ajudar a bloquear determinados ataques enquanto espera por uma migração adequada.
Na verdade, este filtro pode ser ativado ao nível do servidor, para todos os scripts php (SPIP ou não), e garante, se atualizado, que todas as falhas conhecidas em qualquer versão do SPIP são impossíveis de explorar. Daí o seu nome “filtro”: insere-se entre o visitante e o SPIP e verifica se o visitante não está a tentar explorar um ataque conhecido.
Quando uma nova falha é descoberta, basta atualizar este filtro para evitar qualquer ataque através dessa falha; Isto dá-lhe tempo para atualizar os scripts SPIP com tranquilidade e no momento oportuno.
Transferência
Transfira o filtro de segurança:
https://git.spip.net/spip-contrib-o...
O código deste filtro pode ser consultado no link a seguir:
https://git.spip.net/spip-contrib-o...
Também pode recuperá-lo e sincronizá-lo com o GIT:
git clone https://git.spip.net/spip-contrib-outils/securite.git
O ficheiro chama-se ecran_securite.php
Instalação
Há vários métodos possíveis para a instalação deste filtro:
Ao nível de um site SPIP específico:
Basta colocar o ficheiro ecran_securite.php no directório config/ do site para que seja tido em conta automaticamente.
Ao nível do servidor:
Colocar este ficheiro num directório legível por todos os sites (por exemplo /usr/share/php/ecran_securite/).
Alterar o php.ini, acrescentando as linhas a seguir:
auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'
Ou modifique o httpd.conf, acrescentando:
php_admin_value auto_prepend_file '/usr/share/php/ecran_securite/ecran_securite.php'
Neste dois casos, o filtro é incluído a cada «hit» PHP antes de iniciar o script normal, podendo, assim, bloquear qualquer chamada «maliciosa».
Configuração
Além da segurança, o filtro tem a capacidade de modular o acesso dos robots indexadores aos scripts PHP, de forma a avisar para “voltarem mais tarde”, quando o servidor estiver sobrecarregado.
Para as versões recentes, este comportamento é configurável, indicando no ficheiro ecran_securite_options.php:
<?php
define('_ECRAN_SECURITE_LOAD', X);
Desde que o valor de X não seja 0, esta configuração ativa a proteção anti-robots quando a carga do servidor (load) exceder o valor X.
Nota:
O mecanismo de atenuação do filtro de segurança é ativado gradualmente conforme a o load ultrapassa o valor-limite com um load de 4,01, praticamente nenhuma página devolverá erro 429.Não confunda um load de 4 e uma carga de CPU de 400%: não há correspondência direta.
- a carga reflete processos em espera, o que não se deve necessariamente à CPU (por vezes são processos de entrada/saída - nomeadamente de um NFS -. ver Load_average)
- a interpretação da carga de CPU depende do tipo de alojamento (compartilhado, VPS,...) e não deve ser considerada apenas em função do número de processadores da máquina.
Funcionamento do filtro
O filtro intervém o menos possível. Ele apenas bloqueia variáveis que foram sabidamente mal controladas em dado momento da história do SPIP e que poderiam, por isso, facilitar um ataque, sendo compatível com todas as versões do SPIP.
No entanto, o filtro bloqueia sistematicamente determinadas variáveis. Assim, por exemplo, as variáveis denominadas id_xxx são todas verificadas como sendo necessariamente valores numéricos inteiros, de forma a evitar qualquer injeção de código SQL através deste tipo de variável muito comum.
Além disso, bloqueia o acesso, apenas para robots, a páginas que contenham várias paginações em simultâneo (já que a combinação resultante de várias paginações pode implicar em grande número de solicitações).
Verificação e teste
Para verificar a execução correta do script, chame o site público adicionando ao URL ?test_ecran_securite=1 ou &test_ecran_securite=1.
O resultado exibido deverá ser:
Error 403
You are not authorized to view this page (test 1.6.7)