“Com grandes poderes vem grandes responsabilidades” (yeah)
Defense in Depth - planeje falhas; aplicações permanecem mais resistentes com o tempo;
Princípio do Privilégio Mínimo
Termos: Validação vs “Escapar”
Validação ou Filtragem é o processo pelo qual você sujeita um dado a uma série de regras, este dado passará (será válido) ou não
“Escapar” - do inglês Escape - é o processo pelo qual você prepara um dado para um recurso específico, “escapando” algumas partes do dado para evitar confusão entre o que são instruções ou dados
Valide Entradas
Uma das três coisas pode ser dita sobre dados recebidos:
Ele é válido, o usuário enviou o dado que você quer, no formato em que você deseja
Ele é inválido porque o usuário não seguiu ou entendeu as regras sobre o dado que você solicitou (i.e. Número telefônico mal formatado)
Ele é inválido porque o usuário está tentando comprometer seu sistema
Dados vindos do usuário final não podem ser confiados
Valide os dados primeiro, não deixe a validação por ultimo
Diga ao usuário o que ocorreu de errado o quanto antes
o agressor injeta código em sua página que contém um código que reescreve a página para fazer algo malicioso
pode ser prevenido escapando e validando corretamente os dados
CSRF
um site explora a confiança do usuário em outro site para fazer algo acontecer
iFrames
Sessões
Basicamente, combina cookies contendo um ID de sessão com um armazenamento local correspondente àquele ID de sessão
Se o ID de sessão está comprometido, ou o armazenamento de dados não for seguro (/tmp numa máquina compartilhada), as sessões ainda são vulneráveis à ataques
Fixação de Sessões
um agressor engana um usuário a clicar em um link que fornece o ID de sessão, ou um usuário inocente cola um link contendo seu ID de sessão para alguém que não deveria o ter
não permita que IDs de sessão venham por GET, e gere novamente IDs de sessão quando um usuário se autentica
Espoliação de Sessão
IDs de sessão são aleatórios
Para defender-se, implemente algum tipo de identificação de navegador
Injeção de Comandos
O PHP fornece grandes poderes com as funções exec(), system() and passthru(), assim como o operador \` (acento grave)
string escapeshellcmd ( string $command )
string escapeshellarg ( string $arg )
Configurações de Segurança
open_basedir – Restringe o acesso a arquivos pelo PHP à um ou mais diretórios especificados
safe_mode – limita o acesso a arquivos baseado no uid/gid do script em execução e o arquivo a ser acessado. Mais lento, não funciona bem com arquivos por upload.