Escolar Documentos
Profissional Documentos
Cultura Documentos
PHP
Há de se dizer por alguns que o PHP está obsoleto, morto
como Homem de Ferro (se isso foi um spoiler pra você,
sinto muito mas vá se atualizar), porém lhe digo que essa
linguagem presente desde 1995 está longe de nos deixar.
2 Segurança em PHP
1 PHP ini
• disable_functions = string
Pode ser uma boa desabilitar funções nativas do
PHP que sua aplicação não precisa usar, por exemplo
exec, shell_exec, system...
Começamos com o core do PHP, o local em que as
principais configurações estão localizadas – php.ini • open_basedir = string
Nele é possível setar algumas flags de configurações Nesta flag deve ser informada o diretório base
que o PHP deverá seguir durante a execução. Dentre da aplicação para impedir que seja acessado ou
essas flags, temos algumas importantes pare melhorar a executado arquivos que possam estar em outros
segurança da sua aplicação: diretórios. Para exemplificar, vamos supor que sua
aplicação tenha algo como:
• display_errors = off
readfile($_GET[‘file_path’]);
Tendo isso habilitado, o PHP não exibirá os erros que
aconteceram durante a execução na tela do usuário. Sem essa flag configurada corretamente, o
O que é recomendado em ambientes de produção, usuário poderia acessar diversos arquivos no
uma vez que se o usuário ter acesso a essas sistema passando no ‘file_path’ o caminho do
mensagens fica mais fácil um ataque direcionado ou arquivo que ele quer.
exploração daquele bug/vulnerabilidade.
• allow_url_fopen = off
• log_errors = on
Isso evita a execução de arquivos PHP remotamente,
Seguindo essa linha de erros, é importante estar no exemplo de seu código ter:
com essa flag habilitada pois log é informação e
file_get_contents($_POST[‘url’])
informação é ouro!
O usuário poderia passar um caminho de
arquivo ou uma URL maliciosa, parecido com a
flag anterior.
Segurança em PHP 3
2 Inputs de usuários
• Cross-Site-Scripting (XSS)
É um tipo de injection que ocorre com a execução
de scripts maliciosos a partir do que foi informado
no input.
Uma frase que eu gosto muito é “Nunca confie nos
inputs do usuário!”, nem precisa de explicações né? Para esse ataque, o PHP também possui funções
que podem auxiliar como strip_tags() ou
Sempre que possível, é importante aplicar regras no htmlspecialchars().
próprio field/model/classe para que o input seja validado
3 Logs
antes de bater no servidor, uma vez no servidor essas
dicas abaixo podem te salvar!
Para evitar a execução desse tipo de ataque, algumas Por isso é de extrema importância mantermos log
funções nativas do PHP podem ser utilizadas, como do que acontece no sistema, principalmente nas
por exemplo mysql_real_escape_string(), sqlite_ partes mais sensíveis, com o máximo de detalhes que
escape_string() ou str_replace(). pudermos.
4 Segurança em PHP
Um exemplo de uma escrita de log poderia ser: $key = random_bytes(SODIUM_CRYPTO_
SECRETBOX_KEYBYTES);
$log = “[“ . $action . “] [“ . date(“d-m-Y H:i:s”) .
“]” . PHP_EOL. $nonce = random_bytes(SODIUM_CRYPTO_
SECRETBOX_NONCEBYTES);
“User “ . $user . “ IP “ . $SERVER[‘REMOTE_
ADDR’] . PHP_EOL. //criptografar
“---” . PHP_EOL; $cipher = sodium_crypto_secretbox($message,
$nonce, $key);
file_put_contents(“./logs/mylogs.log”, $log,
FILE_APPEND); //descriptografar
$plaintext = sodium_crypto_secretbox_
Segurança em PHP 5