No momento, estou desenvolvendo um plug-in e as chances são de que provavelmente o lançarei no repositório público de plugins para que outros possam usá-lo.
O plug-in usará uma API e, para usá-la, é necessário passar um nome de usuário e senha. Portanto, meu plug-in precisa armazenar essas credenciais de login no banco de dados. Não quero armazená-los em texto sem formatação, embora a API precise deles em texto sem formatação.
Então, minha pergunta é como faço para armazenar essas informações sensíveis? O hash está fora do ar, portanto, deve haver algum tipo de criptografia.
No WordPress, existe uma chave única que pode ser usada que será diferente de blog para blog? Quais funções php devo usar para criptografar e descriptografar? Estou procurando por funções que provavelmente funcionarão em todas as instalações do WP.
Respostas:
Embora eu concorde com as respostas anteriores, para responder à pergunta que você realmente fez, o que vem à mente é usar uma dessas constantes para o wp-config.php:
Eles devem ser únicos nas instalações do wordpress - e são as únicas opções para chaves pré-existentes encontradas no wordpress. A alternativa seria adicionar sua própria constante semelhante, criada com hash de uma delas no endereço de e-mail do administrador ou similar - e depois armazená-la em uma opção de configuração oculta - para proteger contra a perda de sua chave se alguém acidentalmente modificá-las após o seu plugin está instalado. O perigo é que, se eles não foram tornados únicos na instalação inicial, mas o administrador / proprietário do site decide corrigir a falha após o fato, eles não devem quebrar acidentalmente a criptografia da senha.
Quanto às funções de criptografia / descriptografia - uma pesquisa rápida no Google retorna a seguinte listagem com o código que parece ser adequado à conta: http://maxvergelli.wordpress.com/2010/02/17/easy-to-use-and-strong- funções de criptografia-decriptografia-php /
Aqui está uma documentação da criptografia AES usada aqui: http://www.chilkatsoft.com/p/php_aes.asp
fonte
Essa é exatamente a circunstância para a qual o OAuth foi projetado.
Na página inicial do OAuth :
A vantagem do OAuth é que você não precisa armazenar a senha do usuário. Quando eles configuram o plug-in pela primeira vez, eles são solicitados a fazer login com um nome de usuário e senha por meio do aplicativo (geralmente uma página hospedada no mesmo servidor que a API e carregada em um redirecionamento de página, em uma caixa espessa ou em um iframe) .
Após o login do usuário, o servidor (seu sistema) cria uma chave segura que seu sistema (WordPress) pode usar para fazer interface com a API. Essa chave é exclusiva da conta do usuário e do site - e dá ao aplicativo (no WordPress) permissão para fazer coisas com a API em nome do usuário, sem passar suas informações de autenticação todas as vezes.
Se você quiser ver um exemplo disso em ação, confira o Jetpack .
Quando você ativa o plug-in, ele reclama que não está conectado. Quando você o "conecta", insere suas credenciais no WordPress.com e configura a interação OAuth entre o WordPress e a API deles.
Mas você só precisa fazer isso uma vez e seu nome de usuário / senha do WordPress.com nunca são armazenados no banco de dados local do WordPress.
fonte
Esta é uma questão importante, pois muitos serviços ainda não oferecem suporte ao OAuth e o armazenamento de senhas no banco de dados de opções as torna legíveis para todos os plugins do Wordpress (veja meu comentário acima).
Essa ainda não é uma resposta real à pergunta, mas também é muito longa para um comentário. Espero iniciar uma discussão com isso, com o objetivo de encontrar a "melhor" solução possível para esse problema "insolúvel".
A idéia básica que me faz pensar que a criptografia de senhas é possível é a seguinte:
Há uma informação secreta que todo usuário possui: sua senha do Wordpress. Deve ser possível armazenar credenciais em serviços de terceiros criptografados com um formulário derivado secreto que senha e somente descriptografá-los quando o usuário estiver conectado.
Dessa forma, deve ser possível pelo menos tornar impossível roubar as senhas de uma cópia dos arquivos e do banco de dados do Wordpress. Ele não pode resolver o problema de outros plug-ins que roubam credenciais, porque cada plug-in pode capturar a senha de texto sem formatação durante o login.
Na verdade, é muito fácil descriptografar: suponha que já tenhamos uma versão criptografada do serviço de terceiros armazenada no banco de dados, podemos conectar-se ao
'authenticate'
filtro ou sobrescrever awp_authenticate()
função, gerar um hash salgado da senha do usuário em texto sem formatação (por meios dewp_hash_password()
), armazene o hash da senha como uma chave de criptografia em algum lugar privado até que o usuário efetue logout (use o'wp_logout'
gancho para excluir a chave) e use-a sempre que precisarmos da senha de terceiros para descriptografar o valor criptografado no banco de dados.Embora eu ache que deve ser possível fazer isso funcionar, existem vários problemas não resolvidos:
'authenticate'
. O usuário pode ser solicitado a fazer login para manter o período até que isso aconteça.'authenticate'
só é executado quando o usuário efetua login?fonte