Melhorando a Segurança de Aplicativos criados com o CakePHP 3
Uma forma de melhorar a segurança no Cake é usando o componente Security.
Quando usando o componente Security precisamos usar o FormHelper para criar nossos formulários.
Precisamos checar todos os dados entrados pelos usuários.
Outros recursos importantes: validação de dados do banco, componentes Auth, ACL, hashes de senha, criptografia, etc.
Exemplo:
http://book.cakephp.org/3.0/en/tutorials-and-examples/blog-auth-example/auth.html
Outros recursos oferecidos pelo Cake: prevenção SQL injection, XSS, CSRF, tratamento dos inputs, etc.
Mais um: mover o core do CakePHP para fora do diretório web.
Plugin que reforça a segurança do Cake:
https://github.com/nodesagency/cakephp-security
Também o uso de validação e de sanitização ajuda.
Detalhes
http://book.cakephp.org/3.0/en/core-libraries/security.html
A Validação dos dados dos formulários é importante.
Um deles é validar campos importantes e para o tipo adequado.
Quando criamos o aplicativo usando o bake para gerar o CRUD, ele já gera uma validação apenas básica.
Criando validação manualmente
class Clientes extends AppModel{
public $validate = array(
'nome' => 'notEmpty',
'email' => array('notEmpty','email'),
'rua' => 'notEmpty'
);
}
Com RegExp
public $validate = array(
’login’ => array(
’rule’ => ’/^[a-z0-9]{3,}$/i’,
’message’ => ’Only letters and integers, min 3 characters’
)
);
Backup
Efetue um backup ful (de todo o diretório do aplicativo e todo o banco).
Em caso de algum problema poderá colocar o aplicativo de volta rapidamente.
A frequência do backup pode ser diária, semanal, mensal. Vai depender das alterações do aplicativo ou dados do banco e também da importância do aplicativo.
Você tanto pode efetuar o backup manualmente quanto pode automatizar com a ajuda do crontab do servidor ou usar outro método/ferramenta.
Security Salt
O Cake define um valor padrão para as suas sessões e o define em Security.salt.
Esse valor não é alterado, ou seja, todos que fazem download do Cake no site oficial tem Security.salt com o mesmo valor. Então junto com a configuração do arquivo do banco de dados devemos alterar também o valor de Security.salt para preservar a segurança das nossas sessões.
Qual o valor a ser usado?
Qualquer valor que você queira. Geralmente algo exclusivo para o seu site. Uma sequência aleatória de números/texto é geralmente recomendado.
É utilizado como uma "semente" para os vários do hashing usados no Cake funcionar.
No arquivo app/Config/core.php,
Linha 197 (versão 2.3.6), terá:
Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUu1029jdjdiR2G0FgaC9mi');
O Security Salt serve para a geração de Hashes, sempre que precisar gerar um, o cake vai pegar o valor dessa string Pode usar qualquer string, contanto que não seja facilmente adivinhada Isso eh utilizado por exemplo, na criação do hash da senhas de usuários do site.
Detales
http://book.cakephp.org/3.0/en/core-libraries/security.html
Atualizando o Cake entre versões Menores
Sempre que sair uma nova versão é importante atualizar o core do Cake do seu aplicativo. Especialmente se a nova versão trouxer correções de falhas de segurança e seu aplicativo tiver acesso via internet.
Seguindo este roteiro eu atualizei um aplicativo da versão 2.3.6 par a nova versão 2.3.7 sem problemas
- Efetuar backup full, de todo o diretório da aplicação e de todo o banco
- Descompactar a nova versão
- Acessar o diretório lib/Cake da nova versão e copiar o lib/Cake para o mesmo diretório do aplicativo existente.
Aqui eu antes removi todo o conteúdo de lib/Cake no diretório existente.
- Copiar o cakephp-2.3.7/index.php para o raiz do aplicativo, sobrescrevendo o existente (pode ser que não tenha sido alterado, mas por vias das dúvidas...)
- Limpe o cache do aplicativo app/tmp/cache/persistente (e models)
- Mantenha sem alterações o diretório "app" do seu aplicativo
Agora pode testar o aplicativo com o novo core.
Saber versão atual do core do CakePHP:
- Abra o arquivo
aplicativo/lib/Cake/VERSION.txt
Hoje (07/07/2013) saiu a versão 2.3.7 do Cake e a beta 2.4.
Outro assunto é a Migração, no caso entre versões maiores.
Comments fornecido por CComment