Je suis en train de développer un plugin et il y a de fortes chances que je le libère plus que probablement sur le dépôt public de plugins pour que d'autres puissent l'utiliser.
Le plugin utilisera une API et pour utiliser cette API, vous devez passer un nom d'utilisateur et un mot de passe. Mon plugin doit donc stocker ces informations de connexion dans la base de données. Je ne veux pas les stocker en texte brut bien que l'API en ait besoin en texte brut.
Ma question est donc de savoir comment stocker ces informations sensibles? Le hachage est terminé, il doit donc s'agir d'une sorte de cryptage.
Dans WordPress, existe-t-il une clé unique qui peut être utilisée et qui diffère d'un blog à l'autre? Quelles fonctions php dois-je utiliser pour crypter et décrypter? Je recherche des fonctions qui fonctionneront plus que probablement sur toutes les installations WP.
Réponses:
Bien que je sois d'accord avec les réponses précédentes, pour répondre à la question que vous avez réellement posée, ce qui me vient à l'esprit est d'utiliser l'une de ces constantes pour wp-config.php:
Ils sont censés être uniques dans les installations wordpress - et sont les seules options pour les clés préexistantes à trouver dans wordpress. Une autre alternative serait d'ajouter votre propre constante similaire qui est construite en hachant l'une d'entre elles contre l'adresse e-mail de l'administrateur ou similaire - puis en la stockant dans une option de paramètre caché - pour vous protéger contre la perte de votre clé si quelqu'un modifie accidentellement les clés après votre le plugin est installé. Le danger est que s'ils ne sont pas rendus uniques lors de l'installation initiale, mais que l'administrateur / le propriétaire du site décide de rectifier la panne après coup, il ne doit pas accidentellement casser le cryptage de votre mot de passe.
En ce qui concerne les fonctions de cryptage / décryptage - une recherche rapide sur Google renvoie la liste suivante avec un code qui semble correspondre à la facture: http://maxvergelli.wordpress.com/2010/02/17/easy-to-use-and-strong- fonctions de cryptage-décryptage-php /
Voici une documentation du cryptage AES utilisé ici: http://www.chilkatsoft.com/p/php_aes.asp
la source
C'est exactement la raison pour laquelle OAuth a été conçu.
Depuis la page d'accueil OAuth :
L'avantage d'OAuth est que vous n'avez pas besoin de stocker le mot de passe de l'utilisateur. Lors de la première configuration du plug-in, il leur est demandé de se connecter avec un nom d'utilisateur et un mot de passe via l'application (généralement une page hébergée sur le même serveur que l'API et chargée soit dans une redirection de page, une boîte épaisse ou une iframe) .
Une fois l'utilisateur connecté, le serveur (votre système) crée une clé sécurisée que son système (WordPress) peut utiliser pour s'interfacer avec l'API. Cette clé est unique pour le compte d'utilisateur et le site - et elle donne à l'application (sur WordPress) l'autorisation de faire des choses avec l'API au nom de l'utilisateur sans passer à chaque fois ses informations d'authentification.
Si vous souhaitez voir un exemple de cela en action, consultez Jetpack .
Lorsque vous activez le plugin, il se plaint qu'il n'est pas connecté. Lorsque vous le "connectez", vous entrez vos informations d'identification via WordPress.com et configurez l'interaction OAuth entre WordPress et leur API.
Mais vous ne devez le faire qu'une seule fois et votre nom d'utilisateur / mot de passe WordPress.com n'est jamais stocké dans votre base de données WordPress locale.
la source
C'est un problème important, car de nombreux services ne prennent toujours pas en charge OAuth et le stockage des mots de passe dans la base de données d'options les rend lisibles pour chaque plugin Wordpress (voir mon commentaire ci-dessus).
Ce n'est pas (encore) une vraie réponse à la question, mais aussi trop longue pour un commentaire. J'espère susciter une discussion à ce sujet, dans le but de trouver la "meilleure" solution possible à ce problème "insoluble".
L'idée de base qui me fait penser que le cryptage des mots de passe est possible est la suivante:
Chaque utilisateur possède une information secrète: son mot de passe Wordpress. Il devrait être possible de stocker des informations d'identification sur des services tiers chiffrés avec une forme dérivée secrète de ce mot de passe et de les déchiffrer uniquement lorsque l'utilisateur est connecté.
De cette façon, il devrait être possible de rendre au moins impossible de voler les mots de passe d'une copie des fichiers et de la base de données Wordpress. Il ne peut pas résoudre le problème des autres plugins volant des informations d'identification, car chaque plugin peut capturer le mot de passe en texte brut lors de la connexion.
En fait, le déchiffrement est assez facile à faire: supposons que nous ayons déjà une version chiffrée du service tiers stockée dans la base de données, nous pouvons nous connecter au
'authenticate'
filtre ou en écrasant lawp_authenticate()
fonction, générer un hachage salé du mot de passe utilisateur en texte brut (par moyenwp_hash_password()
), stockez ce mot de passe haché comme clé de chiffrement dans un endroit privé jusqu'à ce que l'utilisateur se déconnecte (utilisez le'wp_logout'
crochet pour supprimer la clé) et utilisez-le chaque fois que nous avons besoin du mot de passe tiers pour déchiffrer la valeur chiffrée dans la base de données.Bien que j'ai le sentiment qu'il devrait être possible de faire ce travail, il existe cependant plusieurs problèmes non résolus:
'authenticate'
. L'utilisateur peut être invité à se connecter pour conserver la période jusqu'à ce que cela se produise.'authenticate'
n'est exécuté que lorsque l'utilisateur se connecte réellement?la source