В настоящее время я разрабатываю плагин, и есть вероятность, что я, скорее всего, опубликую его в общедоступном хранилище плагинов, чтобы другие могли его использовать.
Плагин будет использовать API, и для использования этого API вам необходимо передать имя пользователя и пароль. Так что мой плагин должен хранить эти учетные данные для входа в базу данных. Я не хочу хранить их в виде простого текста, хотя API нуждается в них в виде простого текста.
Итак, мой вопрос: как мне сохранить эту чувствительную информацию? Хеширование отключено, поэтому должно быть какое-то шифрование.
В WordPress есть уникальный ключ, который можно использовать в разных блогах? Какие функции php я должен использовать для шифрования и дешифрования? Я ищу функции, которые, скорее всего, будут работать на всех установках WP.
Ответы:
Хотя я согласен с предыдущими ответами, чтобы ответить на вопрос, который вы фактически задали, мне приходит в голову использовать одну из этих констант для wp-config.php:
Предполагается, что они уникальны в установках WordPress и являются единственными вариантами уже существующих ключей, которые можно найти в WordPress. В качестве альтернативы можно добавить собственную аналогичную константу, которая создается путем хеширования одной из них на адрес электронной почты администратора или аналогичной, а затем сохранения ее в скрытом параметре настройки, чтобы предотвратить потерю ключа, если кто-то случайно модифицирует ключи после вашей плагин установлен. Опасность заключается в том, что если они не были сделаны уникальными при первоначальной установке, но администратор / владелец сайта решает исправить ошибку после факта, им не следует случайно нарушать шифрование вашего пароля.
Что касается функций шифрования / дешифрования - быстрый поиск в Google возвращает следующий список с кодом, который, как представляется, отвечает всем требованиям: http://maxvergelli.wordpress.com/2010/02/17/easy-to-use-and-strong- шифрование-дешифрование-PHP-функция /
Вот некоторая документация по шифрованию AES, используемому здесь: http://www.chilkatsoft.com/p/php_aes.asp
источник
Это как раз то обстоятельство, для которого был разработан OAuth.
С домашней страницы OAuth :
Преимущество OAuth в том, что вам не нужно хранить пароль пользователя. Когда они впервые настраивают плагин, их просят войти в систему с именем пользователя и паролем через приложение (обычно это страница, размещенная на том же сервере, что и API, и загруженная либо в виде перенаправления страницы, в толстом ящике, либо в iframe) ,
Как только пользователь вошел в систему, сервер (ваша система) создает безопасный ключ, который его система (WordPress) может использовать для взаимодействия с API. Этот ключ уникален для учетной записи пользователя и сайта - и он дает приложению (на WordPress) разрешение выполнять действия с API от имени пользователя, не передавая при этом свою информацию для аутентификации каждый раз.
Если вы хотите увидеть пример этого в действии, посмотрите Jetpack .
Когда вы активируете плагин, он жалуется, что он не подключен. Когда вы «подключаете» его, вы вводите свои учетные данные через WordPress.com и настраиваете взаимодействие OAuth между WordPress и их API.
Но вам нужно сделать это только один раз, и ваше имя пользователя / пароль WordPress.com никогда не будет храниться в вашей локальной базе данных WordPress.
источник
Это важная проблема, так как многие сервисы все еще не поддерживают OAuth, а хранение паролей в базе данных опций делает их читаемыми для каждого отдельного плагина Wordpress (см. Мой комментарий выше).
Это не (пока) реальный ответ на вопрос, но и слишком длинный для комментария. Я надеюсь начать с этим дискуссию с целью найти «наилучшее» решение этой «неразрешимой» проблемы.
Основная идея, которая заставляет меня думать, что шифрование паролей возможно, заключается в следующем:
У каждого пользователя есть одна секретная информация: пароль Wordpress. Должна быть возможность хранить учетные данные в сторонних службах, зашифрованные с помощью секретной производной формы этого пароля, и расшифровывать их только при входе пользователя в систему.
Таким образом, должна быть возможность, по крайней мере, сделать невозможным кражу паролей из копии файлов Wordpress и базы данных. Это не может решить проблему, связанную с кражей учетных данных других плагинов, потому что каждый плагин может захватить простой текстовый пароль во время входа в систему.
На самом деле дешифрование довольно просто сделать: предположим, у нас уже есть зашифрованная версия стороннего сервиса, хранящегося в базе данных, мы можем подключиться к
'authenticate'
фильтру или, перезаписавwp_authenticate()
функцию, сгенерировать соленый хэш пароля пользователя в виде простого текста (с помощью средствоwp_hash_password()
), храните хешированный пароль в качестве ключа шифрования где-то в секрете, пока пользователь не выйдет из системы (используйте'wp_logout'
хук для удаления ключа), и используйте его каждый раз, когда нам потребуется сторонний пароль для расшифровки зашифрованного значения в базе данных.Хотя у меня есть ощущение, что эта работа должна быть возможной, есть несколько нерешенных проблем:
'authenticate'
. Пользователю может быть предложено войти, чтобы сохранить период, пока это не произойдет коротким.'authenticate'
он запускается только тогда, когда пользователь действительно входит в систему?источник