Всегда ли хранить пароль в виде обычного текста в переменной php или константе php?

В соответствии с вопросом, безопасно ли хранить пароли на php-страницах, таких как

$password = 'pa$$w0rd'; 

Если пользователи не могут это увидеть, это безопасно, не так ли?

EDIT: Некоторые люди на самом деле предложили использовать хеш, однако возникла бы проблема с паролем подключения к серверу базы данных, не так ли?

Короткий ответ – «Нет», «Зависит».

Почти никогда не рекомендуется хранить пароли в обычном тексте, особенно в доступном в Интернете месте, если по какой-либо другой причине, чем простая конфигурация сервера или эхо в неправильном месте, вы можете представить его миру.

Если вы ДОЛЖНЫ хранить пароль (возможно), вы можете попытаться сохранить его за пределами webroot, например /var/www/public_html/ Поместите свой код здесь
/var/www/includes/ Поместите здесь свои пароли

Еще лучше, если бы система требовала, чтобы пароль для (например, обертки базы данных) возвращал объект, который уже был создан. так что вместо того, чтобы запрашивать $databasepassword вы запрашиваете объект PDO, и храните свои классы базы данных вне webroot.

Он зависит от того, какие векторы атаки заставят кого-то получить доступ к этому паролю, и потребует ли он, чтобы они уже находились внутри вашей файловой системы, если это так, вы, вероятно, ввернуты.

Кроме того, если ваш пароль для вашего подписчика с подписью supa-secrit, meh, все, что вы потеряли, это абонентская плата, если у вас есть база данных, у вас может возникнуть проблема, если это ваши банковские реквизиты в Интернете, но для вас это хорошо.

Насколько ценно то, что защищает пароль?

В зависимости от того, как вы определяете безопасность, любой подход имеет свои положительные и отрицательные аспекты.

Если вы действительно хотите сохранить пароль в своем источнике, может быть хорошей идеей сделать что-то вроде этого:

Файл: config.php

 if( ! defined('IN_CODE') ) die( 'Hacking attempt' ); define( 'PASSWORD_HASH', '098f6bcd4621d373cade4e832627b4f6' ); 

Файл: index.php

 define( 'IN_CODE', '1' ); include( 'passwd.php' ); if( md5($password) == PASSWORD_HASH ) ... 

Обычный текст никогда не является хорошей идеей, всегда сохраняйте хэш пароля, который вы хотите сохранить.

Кроме того, попытайтесь выполнить seperate, как это описано в основном исходном файле.

Обычно они не видят этого. Но если что-то плохое происходит на сервере, есть большая вероятность, что сервер вернет ваш PHP-код в виде обычного текста без его выполнения, и поэтому пользователь увидит весь источник этого файла, а также ваш пароль.

Я бы сохранил пароль где-то там, где он не находится в корневом каталоге документа (не может быть открыт в браузере), а затем открыть этот файл с помощью php и прочитать содержимое (пароль). Если у вас несколько паролей / пользователей, я бы сохранил их в базе данных для быстрого доступа.

Если вы хотите использовать макет каталога метода файла, он должен выглядеть примерно так (depneds on server)

/public_html/index.php

/password.txt

 $myFile = $_SERVER['DOCUMENT_ROOT'] + "/../password.txt"; if file_exists($myFile) { $fh = fopen($myFile, 'r'); $password = fgets($fh); fclose($fh); } else die("No password file"); if ($user_input == $password) { ...... Authentication succeeded .......... ......your relatively protected code ..... } else die("Wrong password"); 

Если вы хотите еще больше безопасности вместо хранения пароля в виде текста в этом текстовом файле. Sore it hash, а затем, когда вы хотите сравнить его с пользовательским вводом, генерируйте хэш из пользовательского ввода и сравните его с хэшем пароля, который вы загрузили из текстового файла

 sha1($user_input) == $password_from_txt 

Пока ваша установка PHP работает так, как следует, это не менее безопасно, чем любой другой метод. Я бы предпочел имя constant (define) над переменной. Кроме того, вы можете сохранить хэш пароля вместо простого пароля. Это предотвращает кражу ваших паролей, даже если сайт взломан.

Относительно плохой практики это зависит. Если вам нужно сохранить только один пароль, этот подход будет одобрен. Хранение их вне корневого документа может дать ложное ощущение дополнительной безопасности; корень документа не более абсолютный, чем любой другой параметр сервера.

Если сам сайт не скомпрометирован, и теперь так все эти пароли предоставляют доступ к (ваша БД, возможно?).

Это зависит от того, как вы определяете «безопасный».

Вы правы в том, что обычный пользователь этого не увидит.

Однако это, безусловно, плохая практика; если ваш сайт скомпрометирован, что еще могут получить эти пароли? Я бы сказал, как минимум, вы должны хранить хэш пароля, а не простой текст.

Иногда это просто должно быть fe для почтового приложения, где вы можете войти только с простым паролем, а не с хешем. И если ваше приложение не имеет проблем с безопасностью, оно не должно влиять на вас.

Я верю, что в большинстве случаев простой текстовый пароль был бы паролем базы данных, поскольку MySQL, для exmaple, не будет принимать хеш для аутентификации.

Как упоминалось ранее, лучшим решением является сохранение файла конфигурации PHP с паролем вне веб-узла.

Если вы обеспокоены тем, что кто-то может видеть ваш пароль во время просмотра файла, вы можете просто сделать его нечитаемым для человека, используя base64 funciton.

См. Это сообщение для получения подробной информации и даже небольшой утилиты для Windows, Linux и Mac, что упрощает ее работу.