-
Добавьте новую БД
-
Создайте пользователя для БД
-
Импортируйте файл db/db_name.slq
-
Загрузите PHP-файлы в каталог веб-сервера
-
Отредактируйте файл db_connect.php указав актуальный данные БД
-
Откройте в терминале страницу веб-сайта
- Загрузите файлы
- Перейдите в каталог с файлами
- Выполните настройки БД по адресу http://localhost:8001
- Отредактируйте файл db_connect.php указав актуальный данные БД
- Запустите команду docker-compose up -d
- Перейдите в браузере по адресу http://localhost:80
Логин: admin@local.test Пароль: admin
-
Главная страница:
- Эта страница будет служить точкой входа для пользователей.
- Здесь можно представить краткое описание сайта и предложить пользователям войти или зарегистрироваться.
-
Страница регистрации:
- Эта страница предоставляет форму для пользователей, чтобы зарегистрироваться на сайте.
- Пользователи будут заполнять свое полное имя, электронную почту и пароль.
- После отправки формы, данные пользователя будут сохранены в базе данных, и пользователю будет отправлено письмо с кодом для подтверждения регистрации.
-
Страница подтверждения регистрации:
- Эта страница будет отображаться, когда пользователь переходит по ссылке подтверждения, полученной в письме.
- По этой ссылке будет передаваться уникальный код, который вы будете проверять на сервере.
- Если код подтверждения действителен, изменться статус учетной записи пользователя на "Активен".
-
Страница входа:
- На этой странице пользователи смогут ввести свою электронную почту и пароль для входа на сайт.
- Будут проверяться введенные учетные данные и, в случае успешного входа, устанавливать сессию для пользователя.
-
Страница выхода:
- Пользователи смогут выйти из своей учетной записи, нажав на ссылку выхода.
- На этой странице будет разрушаться текущая сессия пользователя и перенаправлять на главную страницу.
-
Страница администратора:
- Эта страница будет доступна только пользователям с ролью "Администратор".
- На этой странице вы можете отобразить таблицы с предметами, преподавателями и студентами в алфавитном порядке.
- Для каждой таблицы предоставьте возможность добавлять, изменять и удалять записи.
-
Страница преподавателя:
- Эта страница будет доступна только пользователям с ролью "Преподаватель".
- На этой странице вы можете отобразить таблицу с предметами, которые преподаватель ведет, а также студентов, зарегистрированных на эти предметы.
- Для каждого предмета и студента предоставьте возможность изменять соответствующие данные.
-
Страница студента:
- Эта страница будет доступна только пользователям с ролью "Студент".
- На этой странице будет отображена таблица с расписанием предметов студента.
Для реализации безопасности и описанной логики работы сайта на PHP, планирую использовать следующие подходы и методы:
-
Аутентификация и авторизация:
- Систему регистрации и входа для пользователей с использованием хеширования паролей. Будет использоваться функция
password_hash()для хеширования паролей при регистрации и функциюpassword_verify()для проверки пароля при входе. - Механизм сессий для отслеживания аутентифицированных пользователей. Будет использоваться функции
session_start(),$_SESSIONиsession_destroy()для работы с сессиями. - Генерация токенов для защиты сессий. Будут создаваться случайные токены, сохраняться их в базе данных или в сессии пользователя, и проверять их при каждом запросе, чтобы обеспечить безопасность сессий.
- Систему регистрации и входа для пользователей с использованием хеширования паролей. Будет использоваться функция
-
Блокировка учетных записей:
- Учет неправильных попыток входа для каждого пользователя. При каждой неудачной попытке входа увеличивайтся счетчик и проверяется его значение. Если количество попыток достигает определенного порога (например, 3), блокируется учетную запись.
- Механизм разблокировки учетных записей, который может быть выполнен только администратором. Будет добавлено поле "Blocked" в таблицу "Users" со значением "true" для заблокированных учетных записей. Только администратор может изменять это значение.
-
Защита от несанкционированного доступа:
- Проверка роли и статусы пользователей перед выполнением действий, чтобы предотвратить несанкционированный доступ. Например, при обращении к определенным страницам или функциональности, будет проверяться, имеет ли пользователь необходимые права доступа.
- Разделенные данные и функциональность между различными ролями пользователей. Показывать только соответствующую информацию и возможности для каждой роли.
-
Защита от подделки запросов межсайтовой подделки (CSRF):
- Генерация и использование CSRF-токенов для защиты от CSRF-атак. Включить CSRF-токены в формы и проверка их при обработке отправленных данных. - Будет использована функция csrf_token() для генерации уникального токена и включение его в формы и запросы.
-
Ограничение доступа к функциональности: - Условия и проверки ролей и прав доступа для ограничения возможностей каждого типа пользователя. Проверка, имеет ли пользователь право на выполнение определенных действий, прежде чем позволять им выполняться.
-
Сессия с автоматическим выходом: - Механизм отслеживания активности пользователя. Если не было активности в течение определенного времени (например, 10 минут), разрушение сессии и выход из учетной записи автоматически.
-
Защита от инъекций: - Подготовленные выражения и параметризованные запросы для выполнения SQL-запросов, чтобы предотвратить атаки инъекций. - Валидация и очистка данных, вводимые пользователем, прежде чем использовать их в SQL-запросах.
-
Шифрование конфиденциальных данных: - Методы шифрования, например, функции password_hash() и password_verify() для паролей.
-
Таблица "Users" (Пользователи):
- Поля:
- Full Name (Полное имя) (VARCHAR)
- Email (Электронная почта) (VARCHAR)
- Status (Статус) (Активен, Выключен, Не подтвержден, заблокирован) (VARCHAR)
- Role (Роль) (Студент, Преподаватель, Администратор) (VARCHAR)
- Password (Пароль) (VARCHAR)
- Связь:
- Каждый пользователь может быть связан с несколькими лекциями в таблице "Lectures" посредством поля "Teacher" (Преподаватель).
- Поля:
-
Таблица "Subjects" (Предметы):
- Поля:
- Subject Name (Название предмета) (VARCHAR)
- Status (Статус) (Активен, Архивный) (VARCHAR)
- Связи:
- Поле "Subject Name" (Название предмета) в таблице "Lectures" связано с полем "Subject ID" (ID предмета) в таблице "Subjects".
- Поле "Subject ID" (ID предмета) в таблице "Schedule" связано с полем "Subject ID" (ID предмета) в таблице "Subjects".
- Поля:
-
Таблица "Lectures" (Лекции):
- Поля:
- Subject Name (Название предмета) (Ссылка на таблицу "Subjects") (INT)
- Teacher (Преподаватель) (Ссылка на таблицу "Users" с ролью Преподаватель и статусом Активен) (INT)
- Hours (Количество часов) (INT)
- Quotas (Количество квот) (INT)
- Status (Статус) (Доступен, Недоступен) (VARCHAR)
- Связи:
- Поле "Teacher" (Преподаватель) связано с полем "User ID" (ID пользователя) в таблице "Users".
- Поле "Subject Name" (Название предмета) связано с полем "Subject ID" (ID предмета) в таблице "Subjects".
- Поля:
-
Таблица "Schedule" (Расписание):
- Поля:
- Student ID (ID студента) (Ссылка на таблицу "Users") (INT)
- Subject ID (ID предмета) (Ссылка на таблицу "Subjects") (INT)
- Teacher ID (ID преподавателя) (Ссылка на таблицу "Users" с ролью Преподаватель и статусом Активен) (INT)
- Max Concurrent and Retake Subjects (Максимальное количество одновременно активных и перездач предметов) (INT)
- Status (Статус) (Активный, Успешно завершен, Перездача, Провален) (VARCHAR)
- Связи:
- Поле "Student ID" (ID студента) связано с полем "User ID" (ID пользователя) в таблице "Users".
- Поле "Subject ID" (ID предмета) связано с полем "Subject ID" (ID предмета) в таблице "Subjects".
- Поле "Teacher ID" (ID преподавателя) связано с полем "User ID" (ID пользователя) в таблице "Users".
- Поля: