Filosofia
Ao descobrir ou ser informada de uma “brecha” de segurança, a equipa de desenvolvimento do SPIP esforça-se por corrigir o problema o mais rapidamente possível na sua versão de desenvolvimento e nas suas versões estáveis, para não mais distribuir códigos defeituosos.
No entanto, a maioria dos utilizadores nem sempre tem tempo ou possibilidade de atualizar e tende a pesar 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 estiver atualizado, que todas as falhas conhecidas em qualquer versão do SPIP são impossíveis de explorar. Daí o seu nome “filtro”: é colocado 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
Baixe 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 saturado.
Para as versões recentes, este comportamento é configurável, indicando no ficheiro ecran_securite_options.php
:
<?php
define('_ECRAN_SECURITE_LOAD', X);
Esta configuração ativa a proteção anti-robots quando a carga do servidor (load) exceder o valor X. O valor padrão é 4; para desativar, defina como 0.
Nota:
Não confunda carga de 4 e carga de CPU de 400%: não há correspondência direta.
Em particular, a carga reflete processos de espera, o que não se deve necessariamente à CPU (por vezes é a I/O - nomeadamente de um NFS -. cf Load_average)Além disso, o valor de
_ECRAN_SECURITE_LOAD
não deve ser avaliado apenas em termos do número de processadores na máquina.
Especialmente porque o mecanismo de redução do filtro de segurança é ativado gradualmente à medida que a carga excede o valor limite: na carga 4.01 quase não haverá 503 enviados.O 4 representa um bom valor: permite manter um desempenho satisfatório do servidor e evita fazer o visitante esperar.
Funcionamento do filtro
O filtro intervém o menos possível, apenas bloqueia variáveis que sabemos que foram, num determinado momento da história do SPIP, mal controladas e que podem, por isso, dar origem a um ataque. Por isso, é 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 (pois 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.3)