Cursos Magento

Criptografando com Magento

, ,

Atualizado em 16 de fevereiro de 2022

Com o avanço das tecnologias e da exploração de vulnerabilidades, torna-se cada vez mais importante não salvarmos dados sensíveis sem nenhuma criptografia em nossas tabelas. Tudo que puder ser usado para dificultar o vazamento de senhas e dados sensíveis deve ser feito, principalmente no e-commerce.

Tanto o Magento Open Source (Community Edition) como o Enterprise Edition possuem formas seguras de guardar dados sensíveis. Apesar de uma das diferenças entre as versões ser justamente o tipo de criptografia utilizada, ambos são capazes de guardar com segurança dados como tokens, senhas, e outros dados sensíveis. E a forma de fazer isso durante o desenvolvimento de um módulo é relativamente simples e muito pouco explorada pelos desenvolvedores.

Tipos de dados

Uma informação pode ser criptografada usando algoritmos diferentes dependendo do tipo de informação que vamos trabalhar. Quando se trata de dados que não precisam ser descriptografados, como senhas e credenciais, geralmente usa-se um padrão de hash, como md5, md6, sha, etc.

E para dados que precisam ser descriptografados para usar novamente depois, usa-se criptografias de duas vias, ou seja, que podem ser revertidas. E é desse tipo que vou falar neste post.

Criptografando no Magento

Ao desenvolver um módulo que precisa armazenar um dado criptografado de forma que ele possa ser revertido posteriormente devemos usar o método encrypt e decrypt, disponíveis na classe Mage_Core_Helper_Data.

Desta forma, para criptografar uma informação, podemos usar:

Mage::helper('core')->encrypt($data);

E para reverter:

Mage::helper('core')->dencrypt($data);

O que acontece aqui?

Apesar da forma de utilização ser a mesma, o Magneto Open Source utiliza mcrypt do PHP para realizar a criptografia, enquanto a versão Enterprise utiliza a classe Enterprise_Pci_Model_Encryption e um algoritmo SHA-256.

Mas o importante é saber que o elemento usado na reversão dos dados não é o mesmo de uma loja para outra.

O Magento utiliza a chave gerada automaticamente durante sua instalação para reverter os dados criptografados. Ou seja, cada loja tem a sua própria chave para reverter dados salvos com criptografia.

Encryption key na instalação do Magento 1

Posteriormente esta chave fica disponível em app/etc/local.xml.

<crypt>
	<key><![CDATA[93c9516bd363fa8b9fdd8c0382b0b24e]]></key>
</crypt>

Idealmente ela deve ter entre 32 e 56 caracteres. Caso contrário você pode ter erros ao utilizar esta criptografia, assim como os módulos que a utilizam.

Use no seu módulo

Ao desenvolver um módulo que trabalha com tokens, ou outros dados sensíveis, é muito simples trabalhar com a criptografia do Magento.

No arquivo etc/system.xml do seu módulo, basta declarar um tipo de campo como “obscured” e com backend_model como mostrado abaixo. Desta forma o Magento automaticamente irá criptografar o dado salvo antes de guarda-lo na tabela core_config_data.

<token translate="label">
	<label>Token</label>
	<frontend_type>obscure</frontend_type>
	<backend_model>adminhtml/system_config_backend_encrypted</backend_model>
	<sort_order>20</sort_order>
	<show_in_default>1</show_in_default>
	<show_in_website>1</show_in_website>
	<show_in_store>1</show_in_store>
</token>
Resultado do campo token criptografado
Resultado do campo token criptografado nas configurações

A crypt key esquecida

Como o arquivo app/etc/local.xml geralmente não é versionado, ao migrar uma loja existente a key é frequentemente esquecida e gerada novamente. Com isso, as informações salvas na base não são revertidas de forma correta, ocasionando quebras nas configurações de módulos que usam a criptografia.

Portanto, lembre-se de migrar seu local.xml quando colocar sua loja em outro ambiente e salvar sua key em um lugar seguro.

Gostou das dicas?

Comente! Compartilhe!

Últimos posts por Ricardo Martins (exibir todos)
Comentários

Deixe seu comentário

[fbcomments url="https://www.magenteiro.com/blog/magento-1/desenvolvimento/backend/criptografando-com-magento/"]