Контроль корректности данных
Интерактивная среда для изучения валидации пользовательского ввода, проверки бизнес-правил и тестирования граничных условий.
Все операции выполняются локально в браузере. Данные не отправляются на сервер и не используются для реальной регистрации.
Учебные модули
Данные следует проверять до обработки. Клиентская валидация улучшает интерфейс, но не заменяет серверную проверку и ограничения базы данных.
Валидация формы
Проверьте набор пользовательских данных по заданным правилам. Ошибки отображаются для каждого поля отдельно.
ФОРМЫ
Проверка профиля пользователя
Как эти правила реализованы в коде
После проверки формы здесь показывается пример JavaScript, соответствующий правилам этого задания. Это клиентская проверка: в реальном приложении те же ограничения нужно повторить на сервере.
1. Функции проверки отдельных полей
JavaScript
Код различает пустое значение, неверный формат, выход за диапазон и несовпадение паролей. Проверка адреса электронной почты является базовой проверкой структуры, а не подтверждением существования адреса.
Проверки выполняются в браузере. Для реальной системы те же правила должны повторно проверяться на сервере; уникальность и целостность необходимо дополнительно обеспечивать в базе данных.
Анализ инцидентов
Определите, какое правило валидации нарушено. Выберите наиболее точную классификацию и изучите разбор.
СИТУАЦИЙ
Как реализовать проверки в коде
Примеры ниже показывают один из возможных вариантов исправления каждого дефекта. Адаптируйте их к архитектуре своего проекта и проверьте граничные случаи.
Тестовая лаборатория
Проверьте правило диапазона на разных входных значениях. Система сравнит ожидаемый результат с фактическим.
ЛАБОРАТОРИЯ
Проверка диапазона возраста
Допустимы только целые числа в диапазоне от 1 до 120 включительно.
Выберите тестовое значение или введите собственное.
Журнал результатов
| # | Входные данные | Ожидалось | Получено | Результат |
|---|---|---|---|---|
| Записи отсутствуют. Запустите первый тест. | ||||
Публикация изображений и файлов
Учебный модуль по материалам лекции: жизненный цикл загрузки, проверка содержимого, безопасное хранение и контроль доступа. Примеры реализации приведены на PHP.
UPLOAD SECURITY
Любой файл от пользователя считается недоверенным. Атрибут accept, расширение и MIME-тип из браузера сами по себе не обеспечивают защиту.
Жизненный цикл загрузки
Приём POST-запроса с multipart/form-data → проверка ошибки PHP → проверка размера и формата → генерация собственного имени → сохранение в отдельное хранилище → контролируемая выдача.
Основные угрозы
- Загрузка исполняемого файла и потенциальное удалённое выполнение кода (RCE).
- Перезапись существующего файла при использовании исходного имени.
- Directory Traversal — попытка выйти за пределы каталога через пользовательский путь.
- Утечка приватных документов из публичного каталога.
- XSS при небезопасном отображении имени или активного содержимого.
- Отказ в обслуживании из-за размера файлов и количества запросов.
Минимальные проверки на сервере
Разрешительный список расширений; MIME-тип, определённый Fileinfo; проверка структуры изображения; лимит размера; случайное имя; каталог вне публичной web-директории; проверка прав доступа при скачивании.
Безопасная обработка загружаемого изображения
Учебный фрагмент показывает ключевые проверки из лекции. Каталог /var/www-private/uploads/ — пример: его нужно создать и выдать PHP права на запись. Каталог не должен исполнять загруженные файлы и обслуживаться напрямую веб-сервером.
Добавьте авторизацию, CSRF-защиту, ограничение частоты запросов, настройку прав каталога и контролируемую выдачу файла с проверкой владельца. Согласуйте лимиты приложения с настройками PHP и веб-сервера.
Почему нельзя доверять расширению файла?
Файл может иметь расширение photo.php.jpg, а содержимое не соответствовать заявленному формату. Какой подход правильный?
Контроль знаний
Проверка понимания видов валидации, уровней контроля и базовых практик безопасной обработки данных.
АТТЕСТАЦИЯ
Итоговое тестирование
Тест содержит 10 вопросов. Каждый правильный ответ оценивается в 10 баллов. После выбора ответа будет показано объяснение.