Как безопасно хранить пароль внутри PHP-кода?
Как я могу иметь пароль внутри PHP-кода и гарантировать, что никто, просматривающий страницу в браузере, не сможет его получить?
- Это: <?php $password = 'password' ?>
достаточно? Есть лучший, более безопасный способ сделать это?
11 ответов
зависит от тип паролей, которые вы хотите сохранить.
-
если вы хотите хранить пароли для сравнения, например, имея
$users
массив, затем хэширование-это путь.sha1
,md5
или любой другой вкус (вот обзор)добавлять соль учетные записи для дополнительной безопасности, потому что тот же пароль не приведет к тому же хэш
если вы хотите хранить пароли для подключения к другим ресурсам, таким как база данных: вы в безопасности, если вы храните свои пароли вне корня документа, т. е. недоступны браузерам. если это невозможно, вы можете использовать
.htaccess
файл, чтобы отклонить все запросы извне
ваш PHP-код (ошибки конфигурации baring) будет обработан на сервере. Ничего внутри <?php ?>;
блоки будут видны в браузере. Вы должны убедиться, что ваш сервер развертывания не будет показывать синтаксические ошибки клиенту - т. е. отчет об ошибках установлен на что-то, не включая E_PARSE, чтобы поспешное редактирование живого кода (признайте это, мы все это делаем :) не утечка некоторой информации.
Edit: точка о хранении их в файле вне корня документа, чтобы избежать экспозиция, если ваши разрывы конфигурации PHP, безусловно, действительны. Когда я использовал PHP, я сохранил конфигурацию.inc файл за пределами htdocs, который был require
d во время выполнения и экспортированные переменные конфигурации (т. е. пароли).
есть ноуменальные способы сделать это. Однако люди не смогут просматривать пароль, который вы сохранили (как обычный текст) в файле 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, то эти файлы будут доставлены в виде текстовых файлов и любой может увидеть пароль.