Ниже — фрагмент PHP‑кода обработки логина:
$username = $_POST['user']

3 Ноя в 19:17
4 +2
0
Ответы
1
Проблема: прямая запись `$_POST['user']` ненадёжна — может быть отсутствующей, пустой, содержать байты в другой кодировке, XSS или попытки SQL‑инъекции. Решение — проверить/валидировать ввод и применять экранирование по месту использования.
Краткие рекомендации и пример:
1) Гарантировать наличие и привести к строке:
$username = isset($_POST['user']) ? (string) $_POST['user'] : '';
или в современных PHP:
$username = $_POST['user'] ?? '';
2) Обрезать пробелы и контролировать длину (например, не больше 255255255 символов):
$username = trim(mb_substr($username, 0, 255255255, 'UTF-8'));
3) Валидация по правилам приложения (пример — только латинские буквы, цифры и подчеркивание, длина от 333 до 303030):
if (!preg_match('/^[\p{L}0-9_]{3,30}$/u', $username)) {
// ошибка валидации
}
4) Для запросов в базу — использовать подготовленные выражения (PDO) и параметры, а не конкатенацию:
$stmt = $pdo->prepare('SELECT id, password_hash FROM users WHERE username = :u');
$stmt->execute([':u' => $username]);
5) При выводе в HTML — экранировать:
echo htmlspecialchars($username, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
6) Дополнительно: проверяйте кодировку (UTF‑8), реализуйте CSRF‑защиту и ограничение попыток (rate limiting).
Полный минимальный пример:
$username = trim((string)($_POST['user'] ?? ''));
if (mb_strlen($username, 'UTF-8') < 333 || mb_strlen($username, 'UTF-8') > 303030 ||
!preg_match('/^[\p{L}0-9_]+$/u', $username)) {
// отказать
}
// затем PDO prepared statement для поиска пользователя и проверка пароля
// при выводе: echo htmlspecialchars($username, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
Итого: никогда не доверяйте `$_POST` напрямую — проверяйте, валидируйте и используйте контекстно правильное экранирование/подготовку.
3 Ноя в 20:06
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир