Обратите внимание, что этот проект больше не поддерживается.
Этот проект начался как простое школьное задание по курсу PHP, который я посещал. Потом мне понадобилась такая система для какого-то веб-сайта, который я делал, и я решил начать расширяться. Предупреждение: этот проект является/будет очень самоуверенным, а это означает, что я буду добавлять только те функции, которые сам считаю полезными или достаточно интересными для разработки.
password_hash()
для хэширования и соли паролей. Имена пользователей сохраняются в виде обычного текста.PASSWORD_DEFAULT
, который на момент написания использует BCRYPT.АКА «Почему так много файлов?»
Здесь будет административная панель. Как и во многих других веб-приложениях (например, WordPress), к панели администратора можно легко получить доступ, набрав [host]/admin .
Эта папка содержит два файла, которые используются для установки некоторых параметров конфигурации. Дополнительная информация ниже.
Просто некоторые CSS-плюшки для пользовательского интерфейса.
Здесь находится автоматический установщик.
В этой папке находятся все файлы .js, необходимые для работы пользовательского интерфейса.
Эта папка включает в себя основу системы. Он имеет файлы .php для подключения к базе данных, входа и выхода, регистрации/создания новой учетной записи и изменения существующих учетных записей. Также есть scripts.js, в котором есть некоторые общие возможности JavaScript для пользовательского интерфейса. Вам необходимо вставить информацию о вашей базе данных в Credentials.php. Обратитесь за помощью к разделу настройки ниже.
Вы должны прочитать это, прежде чем использовать это. Это обычная лицензия MIT.
Этот файл.
Это страница управления аккаунтом. Здесь пользователи могут изменить свое имя пользователя и пароль.
Этот файл здесь только для демонстрации. Пользователи могут получить доступ к этой странице только в том случае, если они вошли в систему. В противном случае они будут перенаправлены на страницу входа.
Мой взгляд на создание простой формы входа с помощью Bootstrap. Не стесняйтесь изменять его в соответствии с вашими потребностями.
Мой взгляд на создание простой регистрационной формы с помощью Bootstrap. Не стесняйтесь изменять его в соответствии с вашими потребностями.
Это используется автоматическим установщиком для удаления после завершения установки.
Это список наиболее распространенных английских слов. Он используется программой, предлагающей имя пользователя. Вы можете заменить список своим собственным файлом .txt. За каждым словом в списке должен стоять разрыв строки.
Обратите внимание, что параметры конфигурации могут быть изменены. Проверяйте почаще.
Если вы проверите папку /config, вы заметите, что там есть два разных файла. Что дает? Основной файл конфигурации — config.php . Он включает настройки, которые применяются на уровне сервера. В основном вам следует редактировать этот файл.
Если вы также используете предоставленный мной внешний пользовательский интерфейс, вы также можете/должны редактировать config.js. Там вы можете управлять тем, как все будет выглядеть для обычного пользователя. Помните, что эти настройки применяются только на стороне клиента и не применяются каким-либо образом, поэтому пользователи могут их редактировать.
Название опции | Описание | Значение по умолчанию | Поддерживаемые значения |
---|---|---|---|
$disableUserSelfRegistration | Запретить пользователям регистрироваться | ЛОЖЬ | логическое значение |
$usernameMinLength | Самое короткое разрешенное имя пользователя | 3 | 1 -> |
$usernameMaxLength | Самое длинное разрешенное имя пользователя | 30 | 1 -> |
$passwordMinLength | Минимальная длина паролей | 8 | 1 -> |
$usernameRegExp | Все имена пользователей должны соответствовать этому регулярному выражению. | любое регулярное выражение | |
$passwordRegExp | Все пароли должны соответствовать этому регулярному выражению | любое регулярное выражение | |
$newAccountAccessLevel | Полезно для создания вашей первой учетной записи администратора. | "пользователь" | «пользователь», «администратор» |
$debugMode | Позволяет отключить соединение с базой данных (только для отладки) | "нет" | "нет" |
$debugAdminUsername | Позволяет войти в систему в режиме отладки | "админ" | любая строка |
$debugAdminPassword | Позволяет войти в систему в режиме отладки | "" | любая строка |
$debugSkipInstall | Это только для целей отладки | ЛОЖЬ | ЛОЖЬ |
$таймаут | Время бездействия (в секундах), необходимое для выхода пользователя из системы | 900 | любое целое число |
$adminPanelTimeout | Время бездействия, необходимое для выхода пользователя из панели администратора | 450 | любое целое число |
$errorMessages | Показывать больше подробных сообщений об ошибках. Возможна утечка конфиденциальной информации! | по умолчанию | «по умолчанию», «многословный» |
$allowUsernameChange | Должен ли пользователь иметь возможность изменить свое имя пользователя | истинный | логическое значение |
$forceHTTPS | Перенаправляет все соединения, отличные от HTTPS, на HTTPS и отправляет HSTS. | ЛОЖЬ | логическое значение |
В 2019 году отказ от использования HTTPS при работе с любой конфиденциальной информацией (например, паролями) считается огромным риском для безопасности. Вот почему настоятельно рекомендуется использовать только хостинговые решения, которые его поддерживают, и изменить этот параметр на true. В настоящее время вы даже можете совершенно бесплатно получить SSL-сертификат от Let's Encrypt, поэтому нет причин не использовать его. Однако в некоторых (плохо настроенных) средах суперглобальный параметр SERVER["HTTPS"] не определен, даже если HTTPS фактически используется. Это приводит к бесконечному циклу перенаправления. Я сам это усвоил на собственном горьком опыте.
Название опции | Описание | Значение по умолчанию | Поддерживаемые значения |
---|---|---|---|
отключитьUserSelfRegistration | Отключает любые элементы пользовательского интерфейса, связанные с регистрацией. | ЛОЖЬ | правда, ложь |
имя пользователяMinLength | Самое короткое имя пользователя, которое принимает пользовательский интерфейс | 3 | 1 -> |
имя пользователяMaxLength | Самое длинное имя пользователя, которое принимает пользовательский интерфейс | 30 | 1 -> |
парольМинДлина | Самый короткий пароль, который принимает пользовательский интерфейс | 8 | 1 -> |
имя пользователяПравила | Эта строка отображается, если имя пользователя не соответствует регулярному выражению. | любая строка | |
парольПравила | Эта строка отображается, если пароль не соответствует регулярному выражению. | любая строка | |
EnableUsernameSuggestions | Позволяет отключить или включить предложения имени пользователя. | истинный | логическое значение |
РазрешитьИмяПользователяИзменить | Должен ли пользователь иметь возможность изменить свое имя пользователя (только пользовательский интерфейс) | истинный | логическое значение |
EnableLoginMessage | Отображать любое сообщение на странице входа | ЛОЖЬ | логическое значение |
вход в системуСообщение | Определите сообщение, которое будет отображаться, когда параметр EnableLoginMessage имеет значение true. | "" | любая строка |
Как говорилось ранее, вам понадобится база данных MySQL. База данных не требует много места (если только у вас НЕ МНОГО пользователей), и любая относительно последняя версия MySQl должна работать. Вы можете настроить базу данных и создать учетную запись администратора вручную или использовать мой автоматический установщик.
На первом этапе установки установщику необходимо записать файл на диск вашего хоста. Если у вас нет необходимых разрешений для этого, вам придется выполнить установку вручную. См. инструкции ниже.
users
с пятью столбцами: username
, password
, accessLevel
, lastLogin
и rememberMeToken
. Используйте строковый тип данных, например CHAR. Лично мне нравится использовать VARCHAR. Для lastLogin
я рекомендую INT(11). Я бы также добавил поле автоматического увеличения идентификатора в качестве первичного ключа, но это не является строго обязательным.Если вы используете VARCHAR или другой тип данных с различной максимальной длиной строки, вам будет полезна таблица ниже.
Поле | Требуемая длина (минимум) |
---|---|
имя пользователя | То же, что и $usernameMaxLength в config.php. |
пароль | Я рекомендую использовать 255 для безопасности (поскольку метод шифрования PHP по умолчанию может измениться) |
уровень доступа | 5 |
последний вход | 11 |
запомнитьMeToken | 255 |
Не волнуйтесь, что-то вроде этого поможет вам:
CREATE TABLE IF NOT EXISTS users (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
username VARCHAR ( 64 ) NOT NULL UNIQUE,
password VARCHAR ( 255 ) NOT NULL ,
accessLevel VARCHAR ( 10 ) NOT NULL ,
lastLogin INT ( 11 ),
rememberMeToken VARCHAR ( 255 )
);
После настройки базы данных вам необходимо создать свою первую учетную запись администратора. Есть два способа сделать это:
admin
и случайно сгенерированный пароль. (Если вы следовали моему примеру SQL выше и установили ограничение UNIQUE для поля имени пользователя, то учетная запись не будет создана, если она уже существует. Вы не получите сообщение об ошибке.) После того, как вы создали учетную запись администратора, вы должны удалить (или переименуйте) папку /install. Наконец, войдите в вновь созданную учетную запись и измените пароль на странице управления учетной записью.ИЛИ
$newAccountAccessLevel
в config/config.php на «admin», а затем создать новую учетную запись, используя обычную форму регистрации. Вам необходимо удалить папку /install, чтобы получить доступ к странице входа. Не забудьте впоследствии изменить значение обратно на «пользователь».ВАЖНЫЙ! Я еще раз напоминаю вам, что вы ДОЛЖНЫ удалить папку /install перед использованием ее в производственной среде. В противном случае любой сможет увидеть ваши учетные данные базы данных!
После настройки вы можете создавать новые учетные записи (административные или обычные) с помощью панели администратора.
Это означает, что установщик заметил, что функция random_bytes(int)
не существует или работает неправильно. Если вы используете версию PHP старше 7.0, вам необходимо использовать стороннюю библиотеку, реализующую эту функцию. Для PHP 5.x я рекомендую этот.
По умолчанию MySQL — 3306.
Это происходит, когда мастеру не удается удалить себя. Обычно это вызвано некоторыми ограничительными разрешениями на хосте. Устраните проблему, удалив папку /install вручную.
Ознакомьтесь с советами по устранению неполадок в общих часто задаваемых вопросах ниже.
Админ-панель находится на очень ранней стадии разработки. Многие вещи могут быть сломаны.
Еще больше будет добавлено в будущем.
/админ
Прочтите config.php внимательнее.
Это означает, что при попытке подключения к базе данных возникло PDOException
. Вы можете включить более подробные сообщения об ошибках в /config/config.php . Наиболее распространенными причинами являются:
PDO_MYSQL
недоступны или настроены неправильно.PDO_MYSQL
. Нет, это не так, и это было слишком долго, я знаю. Я планирую добраться до этого в ближайшее время™. Обновление: теперь оно работает. Обратите внимание, что он запоминает логин только в течение 30 дней (по соображениям безопасности).
Да, я знаю, что реализация чего-то подобного всегда открывает новые дыры в безопасности. Однако я не заставляю пользователей использовать его или что-то в этом роде. Если пользователь не устанавливает флажок, токен доступа не создается, поэтому для этого пользователя нет угрозы безопасности.
random_bytes()
. Этот токен сохраняется в базе данных, и в браузер отправляются два файла cookie. Значением первого файла cookie является имя пользователя в виде обычного текста. Второе печенье гораздо важнее. Его значением является созданный токен.Основная проблема заключается в том, что если «плохой парень» каким-то образом сможет получить доступ к токену пользователя, он может легко подделать файл cookie и войти в систему как этот пользователь. У злоумышленника есть два способа получить доступ к токену пользователя: каким-то образом (например, SQL-инъекция) получить его из базы данных или украсть файл cookie и/или его значение у пользователя.
Я считаю это угрозой безопасности, поскольку некоторые люди склонны использовать слишком простые или одинаковые пароли. Однако я мог бы разрешить это в будущих версиях с помощью опции конфигурации.