Situação atual: PHP2Shell. Duas vulnerabilidades críticas do PHP (CVSS 9,2) permitem executar código malicioso sem autenticação. Patches disponíveis desde 21/10/2026.O que fazer agora →

Compreender as extensões PHP (Extensions)

As extensões trazem ao PHP controladores de bases de dados, cifragem ou caches. Como se distinguem os tipos, como as carregar e verificar, e o que significam para atualizações e reforço.

Atualizado em 5 min de leituraConhecimento PHP

Em resumo: As extensões PHP (Extensions) são módulos em C que acrescentam funções ao PHP, como controladores de bases de dados (PDO), cifragem (Sodium, OpenSSL) ou a cache de bytecode OPcache. O manual do PHP distingue extensões Core, Bundled, External e PECL. São carregadas através de extension ou zend_extension no php.ini. Cada extensão corre no processo PHP com as permissões deste. Por isso vale: carregar apenas o que é necessário e atualizar em conjunto com o PHP.

O que são as extensões PHP?

O núcleo do PHP, a Zend Engine, consegue executar código, mas muito do que as aplicações precisam está em extensões. Estão escritas em C e ou são compiladas de forma fixa no PHP ou carregadas no arranque como biblioteca partilhada (.so no Linux, .dll no Windows).

Importante para quem decide: as extensões não são plugins da aplicação, mas parte do ambiente de execução PHP. São instaladas pelo alojador ou pelo administrador do servidor, não pela agência no CMS. Se faltar uma extensão, a aplicação costuma comunicar um erro na instalação ou na atualização.

Igualmente importante é a distinção em relação aos pacotes do Composer. O Composer instala bibliotecas escritas em PHP e que estão na pasta do projeto, por exemplo um pacote de correio ou de PDF. As extensões, em contrapartida, são código compilado carregado no arranque do PHP e válido para todas as aplicações no servidor. Muitos pacotes do Composer exigem determinadas extensões e registam-no no seu composer.json com entradas como ext-intl ou ext-sodium. Quem quiser verificar se um projeto encontra todas as extensões necessárias pode executar composer check-platform-reqs na pasta do projeto.

Que tipos de extensões existem?

O manual do PHP atribui as extensões a quatro grupos:

Grupo Significado segundo o manual Exemplos do manual
Core parte do núcleo do PHP, não pode ser desligada Arrays, Date/Time, Hash, JSON, PCRE, SPL, Strings
Bundled distribuídas com o PHP BC Math, Ctype, Fileinfo, Filter, GD, intl, mbstring, PDO, Sessions
External distribuídas com o PHP, precisam de bibliotecas externas cURL, DOM, GMP, LDAP, OpenSSL, Sodium, Zip
PECL disponíveis através do PECL, em parte com bibliotecas externas APCu, Memcached, MongoDB, Yaml

A atribuição pode mudar. Com o PHP 8.4, segundo a página de lançamento, as extensões IMAP, OCI8, PDO_OCI e pspell foram retiradas da distribuição e movidas para o PECL. Quem as usa precisa, depois do upgrade, de uma instalação separada, que também tem de ser mantida.

Como são carregadas as extensões?

As extensões partilhadas são carregadas, segundo o manual, através da diretiva extension no php.ini; as extensões Zend, que interferem mais profundamente no motor, através de zend_extension. Ambas só podem constar do php.ini. A pasta é definida por extension_dir, para o qual o manual recomenda um caminho absoluto.

; extensões normais
extension=pdo_mysql
extension=sodium
extension=intl

; extensão Zend: OPcache (carregar antes do Xdebug, se ambos estiverem ativos)
zend_extension=opcache

Distribuições como Debian e Ubuntu colocam para cada extensão um pequeno ficheiro .ini próprio na pasta de varrimento, por exemplo em /etc/php/8.3/mods-available/, e ativam-no por SAPI com phpenmod e phpdismod. Como o PHP lê estes ficheiros explica-o O php.ini explicado.

As extensões são instaladas em geral através da gestão de pacotes, por exemplo como pacote php8.3-intl. As extensões PECL podem ser compiladas com pecl ou phpize. Segundo o manual, o PECL está descontinuado; recomenda-se o PHP Installer for Extensions (PIE). Quem compila o PHP por completo por si próprio encontra indicações em Compilar o PHP a partir do código-fonte.

Verificar as extensões: quais estão realmente carregadas?

Os comandos seguintes são de pura leitura. Tenha em conta que a linha de comandos pode carregar extensões diferentes das do site.

php -m                              # módulos da CLI
php-fpm8.3 -m                       # módulos do PHP-FPM 8.3 (nome consoante a distribuição)
php --re sodium | head -n 5         # funções de uma extensão
php --ri opcache                    # configuração de uma extensão
php -r 'var_dump(extension_loaded("intl"));'

No código, as aplicações verificam com extension_loaded() se uma extensão existe e com get_loaded_extensions() quais estão carregadas:

<?php
$benoetigt = ['pdo_mysql', 'mbstring', 'intl', 'sodium'];
$fehlend = array_diff($benoetigt, array_map('strtolower', get_loaded_extensions()));
echo $fehlend ? 'Fehlt: ' . implode(', ', $fehlend) : 'Alle Erweiterungen vorhanden';

Extensões e segurança: menos é mais

As extensões correm no mesmo processo que o PHP e com as mesmas permissões. Uma falha numa extensão pode, por isso, pesar tanto como uma falha no núcleo. Daqui resultam quatro regras:

  1. Carregar apenas o que é necessário. Cada extensão adicional aumenta a superfície de ataque. Verifique a sua lista em relação aos requisitos de sistema da aplicação.
  2. Atualizar em conjunto com o PHP. As extensões fornecidas vêm com a atualização do PHP. As extensões PECL e de terceiros precisam de atualizações próprias e têm de corresponder à nova versão do PHP.
  3. Ferramentas de desenvolvimento fora da produção. Depuradores e profilers como o Xdebug pertencem apenas a ambientes de desenvolvimento.
  4. Bloquear funções de forma dirigida. Onde as extensões trazem funções para comandos de sistema, ajuda Usar o disable_functions corretamente.

No PHP2Shell, as vulnerabilidades estão no núcleo do PHP, não numa extensão. Desligar módulos não as fecha; é necessária a atualização para 8.5.12, 8.4.27, 8.3.36 ou 8.2.35 com reinício de todos os processos PHP. Depois da atualização, deve verificar se todas as extensões voltam a ser carregadas, pois os módulos em falta muitas vezes só se notam em determinadas funções. Como manter as dependências sob controlo de forma duradoura descreve-o Manter as dependências atualizadas.

Como ajuda concretamente a PHP SOS?

  • Levantar o inventário: Listamos, por SAPI, todas as extensões carregadas com origem e versão.
  • Limpar: Comparamos a lista com as necessidades da sua aplicação e desativamos o que é supérfluo, após teste.
  • Atualizar: No âmbito do reforço de servidores, levamos o PHP e todas as extensões de terceiros para um estado mantido.
  • Verificar depois das atualizações: Controlamos que, após cada atualização do PHP, todos os módulos necessários voltam a estar carregados.

Perguntas frequentes

Qual é a diferença entre extension e zend_extension?

Com extension, o PHP carrega extensões normais, como controladores de bases de dados. Com zend_extension carregam-se, segundo o manual, extensões Zend que interferem mais profundamente no motor, por exemplo o OPcache ou o Xdebug. Ambas as diretivas só podem constar do php.ini.

Como vejo que extensões estão carregadas?

Na linha de comandos com php -m; para o site, através da função get_loaded_extensions() num ficheiro de teste temporário ou através de php-fpm -m da respetiva versão. Tenha em conta que a CLI e a SAPI web podem carregar extensões diferentes.

O que é o PECL e o que é o PIE?

O PECL é um diretório de extensões PHP disponibilizadas através do sistema de pacotes PEAR. Segundo o manual do PHP, o PECL está descontinuado; recomenda-se em vez dele o PHP Installer for Extensions (PIE).

Desativar uma extensão resolve o PHP2Shell?

Não. As vulnerabilidades do PHP2Shell estão no núcleo do PHP, não numa extensão que se possa desligar. Menos extensões reduzem a superfície de ataque em geral, mas não substituem a atualização para uma versão corrigida.

Fontes

Contacto imediato

Cada hora conta. Escreva-nos agora.

Descreva brevemente o sistema, a versão do PHP e o que observou. Entramos em contacto consigo, esclarecemos a situação e trabalhamos remotamente até o incidente estar concluído e documentado.

Ajuda imediata