Безопасный список паролей в PHP - PullRequest
0 голосов
/ 10 февраля 2010

Я думаю о том, чтобы сохранить список паролей для пользователей (в конечном итоге больше информации о них) небольшого (макс. 20 пользователей) приложения в файле PHP в каталоге, например public_html_root/system/config/

<?php if($calledByApp !== true) die();
  $pwds['username1'] = 'hispassword';
  $pwds['username2'] = 'herpassword';
  $pwds['username3'] = 'anotheroned';
?>

Теперь. hispassword на самом деле хешированная версия

$hashedpasword = sha1($password.sha1($salt));

Таким образом, если файл включен, он проверяет наличие $calledByApp, которое устанавливается при запуске с точки входа - то есть index.php в корне, поэтому мы можем сказать, что это безопасно. Если он вызывается непосредственно из браузера - он не будет использоваться как текстовый файл, а скорее как файл PHP - и он также умрет, поскольку $calledByApp вернет null или false.

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

if (is_string($pwds[$sanitized_username]) 
&& ($pwds[$sanitized_username] === $sanitized_sha1_userpassword))

мы сделаем логин.

Мой вопрос: достаточно ли этого ?

Пояснение: БД для пользователей выглядит несколько излишне - еще одна таблица для max 20 пользователей. Кроме того, хотя это и не проверяет, является ли пользователь реальным, реальное, оно не будет ничего делать с БД - похоже, это также дополнительная безопасность.

Ответы [ 4 ]

5 голосов
/ 10 февраля 2010

Если по какой-то причине у mod_php есть сбой, это может привести к тому, что httpd покажет неинтерпретированный файл; сохраните скрипт за пределами корня документа, чтобы исправить это.

3 голосов
/ 10 февраля 2010

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

1 голос
/ 10 февраля 2010

Нет - это действительно плохая идея.

Делая свои файлы кода souce доступными для записи, вы открываете целый путь для атаки на вашу систему. Встраивание данных в исходный код - грязная практика, не в последнюю очередь потому, что она не масштабируется. Что произойдет, если файл заблокирован для обновления, когда скрипт пытается его включить? Что происходит, когда соединение с браузером теряется в процессе записи файла?

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

C.

0 голосов
/ 10 февраля 2010

Всегда безопаснее хранить зашифрованные пароли в базе данных.

Если вы используете базу данных, тогда я бы сохранял там пользовательские данные. Если нет, то я хотел бы начать использовать один.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...