Как безопасно хранить пароль внутри PHP-кода?

Как я могу иметь пароль внутри PHP-кода и гарантировать, что никто, просматривающий страницу в браузере, не сможет его получить?

- Это: <?php $password = 'password' ?> достаточно? Есть лучший, более безопасный способ сделать это?

11 ответов


зависит от тип паролей, которые вы хотите сохранить.

  • если вы хотите хранить пароли для сравнения, например, имея $users массив, затем хэширование-это путь. sha1, md5 или любой другой вкус (вот обзор)

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

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


ваш PHP-код (ошибки конфигурации baring) будет обработан на сервере. Ничего внутри <?php ?>; блоки будут видны в браузере. Вы должны убедиться, что ваш сервер развертывания не будет показывать синтаксические ошибки клиенту - т. е. отчет об ошибках установлен на что-то, не включая E_PARSE, чтобы поспешное редактирование живого кода (признайте это, мы все это делаем :) не утечка некоторой информации.

Edit: точка о хранении их в файле вне корня документа, чтобы избежать экспозиция, если ваши разрывы конфигурации PHP, безусловно, действительны. Когда я использовал PHP, я сохранил конфигурацию.inc файл за пределами htdocs, который был required во время выполнения и экспортированные переменные конфигурации (т. е. пароли).


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

Так что это "безопасно".


допустим, ваш пароль "iamanuisance". Вот как сохранить пароль в коде. Просто засунь это куда-нибудь в заголовок.

//calculate the answer to the universe
${p()}=implode(null,array(chr(0150+floor(rand(define(chr(ord('i')+16),'m'),
2*define(chr(0x58),1)-0.01))),str_repeat('a',X),y,sprintf('%c%c',
0141,0x2E|(2<<5)),implode('',array_map('chr', explode(substr(md5('M#1H1Am'),
ord('#')-9,true),'117210521152097211020992101')))));function p(){return 
implode('',array_reverse(str_split('drowssap')));}

на всякий случай это не совершенно очевидно, вы можете легко получить доступ к паролю позже как $password. Ура! : P


хранить пароль в зашифрованном виде. Например, возьмите вывод:

sha1("secretpassword");

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


Если вы можете получить пароль в PHP,то он извлекается...

единственное, что вы можете сделать, это переместить пароль в "защищенное" место.

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

но они все еще на вашем сервере, и когда кто-то получает доступ к вашей коробке, тогда у него есть пароль:. (Он попадает на ваш PHP, который имеет способ его декодировать, и у него есть доступ к защищенному файлу -> он может его прочитать)

таким образом, нет такой вещи, как "безопасный пароль"

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

вот где все входит хеширование и соление. Вы хотите, чтобы кто-то мог получить доступ к ресурсу. Таким образом, вы хэшируете + солите пароль и сохраняете его в БД для пользователя, который хочет получить доступ к службе, и когда пользователь хочет аутентифицироваться, вы применяете тот же алгоритм для создания хэша и сравнения.


Basic, вероятно, не 100% водонепроницаемость, но достаточно для общих целей:

хэш пароль (используйте соль для дополнительной безопасности), используя ваш любимый алгоритм, и хранить хэш (и соль). Сравните соленый и хэшированный ввод с сохраненными данными, чтобы проверить пароль.


блоки кода PHP не могут быть получены клиентами, если они не выводят что-то. Заметьте:

<?php
   if($password=="abcd")
       echo "OK";
   else
       echo "Wrong.";
?>

пользователь может получить либо ОК, либо неправильно ничего другого.


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


как было предложено, хранить пароль sha1, соленые и перченые

function hashedPassword($plainPassword) {
    $salt = '1238765&';
    $pepper = 'anythingelse';    
    return sha1($salt . sha1($plainPassword . $pepper));
}

а затем сравните два значения

if ($stored === hashedPassword('my password')) {
   ...
}

и если вы не можете хранить свои хэшированные пароли за пределами корня сервера, не забудьте указать apache запретить доступ к этому файлу в вашем .файл htaccess:

<Files passwords.config.ini>
  Order Deny,Allow
  Deny from all
</Files>

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