Pesquisa de site

Principais dicas de segurança de fortalecimento de PHP para servidores Linux


Não é de admirar que PHP seja uma das linguagens de programação de script de servidor mais usadas. Faz sentido para um invasor encontrar várias maneiras pelas quais ele pode manipular o PHP, já que ele geralmente é emparelhado com o MySQL e permite o acesso aos dados privados de seus usuários.

De qualquer forma, não estamos afirmando que o PHP é vulnerável ou tem alguns problemas sérios por padrão, mas temos que ter certeza de que ajustamos o PHP de tal forma que ele possa ser mais robusto do que nunca.

1. Remova módulos PHP desnecessários

Por padrão, você obtém um conjunto de módulos PHP que podem ser úteis em diversas tarefas, mas alguns módulos desnecessários podem não ser úteis para cada projeto. Para listar os módulos PHP disponíveis, utilize o comando fornecido:

php -m

Os módulos estão localizados no diretório /etc/php.d/ e podem facilmente alterar nosso diretório atual para /etc/php.d/ usando o seguinte comando cd.

cd /etc/php.d/

A razão pela qual estamos alterando o diretório para remover módulos é que os módulos têm nomes bem diferentes no diretório original. Agora, liste os módulos disponíveis pelo comando fornecido:

ls

Por exemplo, vamos remover o módulo curl utilizando o comando fornecido:

sudo rm -r 20-curl.ini

2. Desative a execução remota de código PHP

Na maioria dos casos, as conexões remotas não são confiáveis. Ao desabilitar o acesso aos wrappers fopen, eles só poderão acessar arquivos locais. Para desabilitar o fopen, precisamos abrir o arquivo de configuração do PHP utilizando o comando fornecido:

sudo nano /etc/php.ini

Agora, use CRTL + w e digite allow_url_fopen que nos levará a linhas específicas de onde desabilitaremos essas opções.

allow_url_fopen=Off
allow_url_include=Off

Assim que terminar as alterações, salve o arquivo de configuração com CTRL + O e pressione Enter.

3. Desative o vazamento de informações do PHP

Quando não desativado, o mundo pode identificar facilmente qual versão do PHP está sendo usada atualmente pelo nosso servidor web. Isso pode não parecer grande coisa, mas informar ao invasor a versão exata pode ser perigoso.

sudo nano /etc/php.ini

Agora, altere os padrões para “Desligado ”.

expose_php=Off

4. Desative os registros de erros do PHP

Por padrão, cada erro do nosso servidor web é visível para os nossos visitantes, incluindo invasores. Para garantir que nenhum dos erros fique visível para ninguém, temos que fazer alterações em nosso arquivo de configuração PHP.

sudo nano /etc/php.ini

E altere a configuração padrão de exibição de logs de erros para “Desligado ”.

display_errors = Of

Mas e se você for um desenvolvedor e precisar de logs de erros para superar problemas de desenvolvimento? Não se preocupe, existe uma maneira de obter seus arquivos de log fazendo apenas uma pequena alteração no mesmo arquivo de configuração.

Só precisamos ativar log_errors e fornecer um caminho para error_log onde nossos arquivos de log serão armazenados.

log_errors=On
error_log=/var/log/httpd/php_scripts_error.log

5. Controle de recursos PHP

Segundo nós, gerenciar recursos é a parte mais importante na segurança do PHP. Aqui, vamos alocar uma quantidade fixa de tempo de execução, tempo de entrada e limite de memória para que, se de alguma forma nosso script for comprometido, a execução será interrompida após um determinado tempo.

Escolhemos 25 segundos para execução e tempo de entrada e 30 MB de limite de memória. Claro que você pode personalizá-lo de acordo com suas necessidades.

max_execution_time = 25
max_input_time = 25
memory_limit = 30M

6. Restringir o acesso a arquivos PHP

Para restringir o acesso aos arquivos, vamos ativar open_basedir, o que garantirá que o PHP possa incluir apenas arquivos de nossos diretórios listados.

Importante: Isso bloqueará todos os outros diretórios e exigirá que adicionemos diretórios importantes manualmente, o que também inclui a adição de arquivos temporários e diretórios de sessão.

open_basedir = "/home/sagar/public_html:/var/lib/php/tmp_upload:/var/lib/php/session"

7. Configurar uploads de arquivos PHP

Se o seu aplicativo não exigir o upload de arquivos do usuário, é sempre aconselhável desabilitar o upload de arquivos. Isso evita que invasores carreguem scripts perigosos que podem acabar danificando todo o aplicativo.

file_uploads = Off

Mas e se o seu aplicativo for projetado para obter arquivos do usuário? Nesse caso, você deve ativar o upload de arquivos, mas tentar reduzir o espaço máximo e o número máximo de arquivos que podem ser carregados a partir de uma única solicitação.

file_uploads = On
upload_max_filesize = 1M
max_file_uploads = 1

No PHP, por padrão, os arquivos temporários são colocados em um diretório que todos os usuários do sistema podem escrever. O local padrão deve ser mudado para um local mais seguro e certifique-se de que não esteja localizado na raiz da web.

Como utilizamos open_basedir, usaremos o mesmo local que já o colocamos na lista de permissões.

upload_tmp_dir = /var/lib/php/tmp_upload

8. Desative funções PHP perigosas

PHP possui várias funções habilitadas por padrão e podem ser úteis para fins de desenvolvimento. Mas muitas funções podem ser usadas por hackers para explorar nosso servidor web e desativá-las adicionará uma camada de segurança.

Temos um conjunto de funções desabilitado e certifique-se de verificá-las antes de fazer alterações no arquivo de configuração.

disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

9. Altere o diretório de cache SOAP

Como alteramos o diretório temporário padrão e a sessão, o mesmo se aplica ao cache SOAP, pois ele não deve ser salvo no diretório padrão. Certifique-se de que ele esteja salvo em um local seguro.

soap.wsdl_cache_dir = /var/lib/php/soap_cache

10. Controle o tamanho do PHP POST

Ao controlar o tamanho do POST, podemos proteger nosso servidor contra hackers que tentam coagular os recursos do servidor enviando arquivos enormes. Isso nos evita travamentos indesejados do servidor e tempo de resposta lento.

post_max_size=4M

11. Proteja as configurações PHP

Ao remover arquivos desnecessários, geralmente removemos alguns arquivos ou até mesmo diretórios cruciais. Portanto, devemos ajustar as configurações de tal forma que mesmo os usuários root não possam excluí-las. Para criar arquivos e diretórios, utilizaremos chattr com sinalizadores diferentes.

Depois de usar o comando fornecido, você não poderá mais modificar um arquivo específico ou removê-lo.

sudo chattr +i /etc/php.ini

Ao tentar remover um arquivo imutável, será exibido um erro dizendo “Operação não permitida”.

sudo rm -r /etc/php.ini

Mas e se você quiser continuar gravando esses arquivos e ao mesmo tempo torná-los imutáveis? Você pode conseguir isso facilmente usando o sinalizador +a em vez de +i.

sudo chattr +a /etc/php.ini

Pode haver alguns casos em que você não precisa mais do arquivo de configuração antigo e, nesse caso, temos que remover atributos.

sudo chattr -i /etc/php.ini

Da mesma forma, se você usou atributos +a no processo de tornar os arquivos imutáveis, você pode reverter isso utilizando o comando fornecido:

sudo chattr -a /etc/php.ini

12. Use certificados SSL para HTTPS

Hoje em dia, cada navegador moderno como Google Chrome, Firefox, Opera e outros recomenda o uso de HTTPS para servidores web. Como o HTTPS fornece um canal de acesso seguro e criptografado para sites não confiáveis, podemos fornecer uma experiência confiável aos nossos usuários.

Ao adicionar HTTPS, podemos nos proteger contra ataques XSS, inclusive evitando que hackers leiam os dados transportados usando códigos.

Para ativar o HTTPS, instalaremos e usaremos o certificado Let’s Encrypt SSL gratuito no servidor.

sudo dnf install epel-release 
sudo dnf install certbot python3-certbot-apache mod_ssl
sudo certbot --apache -d domain.com   [For Apache]
sudo certbot --nginx -d domain.com    [For Nginx]

13. Atualize o PHP regularmente

Por ser uma linguagem de código aberto, ela é corrigida quase diariamente. Pode não parecer um passo muito importante, mas pode salvá-lo de grandes vulnerabilidades. Portanto, certifique-se de manter seus pacotes PHP atualizados, o que o salvará de muitas vulnerabilidades possíveis.

yum update & yum upgrade    [On RHEL-based systems]
apt update && apt upgrade   [On Debian-based systems]

Esta foi a nossa opinião sobre como você pode facilmente aumentar a segurança do PHP em sistemas Linux. Ao longo deste tutorial tentamos simplificar ao máximo e se ainda tiver alguma dúvida, deixe-nos saber nos comentários.