Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама
Новини 29 серпня 2026

Маскування параметрів запитів у повідомленнях про помилки Laravel

Коли запит до бази даних завершується помилкою, Laravel створює виняток QueryException, повідомлення якого містить SQL-код з усіма підставленими значеннями параметрів. Це зроблено навмисно: повідомлення на кшталт SQL: insert into "users" ("email") values (?) майже нічого не говорить про те, який саме рядок спричинив проблему, тоді як версія з реальними значеннями дає миттєву відповідь.

Проблема безпеки даних

Проблема полягає в тому, що таке повідомлення не залишається там, де ви його бачите. Це рядок у винятку, а винятки записуються в різні місця.

Розгляньмо типовий приклад:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ada@example.com' for key 'users_email_unique' (Connection: mysql, Host: 10.0.4.17, Port: 3306, Database: platform, SQL: insert into `users` (`email`, `name`, `national_id`) values (ada@example.com, Ada Lovelace, 640312-4185))

Кожне значення, передане в цей запит insert, тепер знаходиться в рядку логу. Якщо запит виконувався всередині задачі черги, той самий рядок потрапляє в колонку exception таблиці failed_jobs, оскільки метод DatabaseFailedJobProvider::log() перетворює виняток на рядок і вставляє його. Якщо ви використовуєте APM або агент OpenTelemetry, він записав виняток у span. Будь-яке місце, куди ваша система звітування про помилки надсилає дані, тепер зберігає копію всіх цих параметрів: email-адреси, імена, державні ідентифікатори, API-токени, що записуються в таблиці інтеграцій.

Рішення в Laravel 13.27

Laravel 13.27 додає опцію на рівні з'єднання з базою даних, яка зупиняє інтерполяцію значень у повідомлення про помилки.

Як увімкнути маскування

Встановіть параметр mask_bindings_in_exception_messages для з'єднання:

'connections' => [
    'mysql' => [
        'driver' => 'mysql',
        // ...
        'mask_bindings_in_exception_messages' => env('DB_MASK_BINDINGS', false),
    ],
],

Цей ключ входить до стандартного файлу config/database.php фреймворку для всіх п'яти стандартних з'єднань, тому додаток, який ніколи не публікував цей конфігураційний файл, може увімкнути маскування лише через змінну оточення:

DB_MASK_BINDINGS=true

Результат маскування

Після увімкнення цієї опції повідомлення зберігає свої заповнювачі ?:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'ada@example.com' for key 'users_email_unique' (Connection: mysql, Host: 10.0.4.17, Port: 3306, Database: platform, SQL: insert into `users` (`email`, `name`, `national_id`) values (?, ?, ?))

Таким чином, чутливі дані користувачів не потрапляють у логи, системи моніторингу та інші місця, де зберігаються повідомлення про помилки. Це особливо важливо для відповідності вимогам захисту персональних даних та безпеки додатків.

Додаткові ресурси

Для глибшого розуміння теми варто ознайомитися з повним оглядом Laravel 13.27, документацією про налагодження та логування в Laravel-додатках, а також інструментами для виявлення персональної інформації в тексті (Privacy Filter) та клонування продакшн-баз даних з анонімізованими даними (Clonio CLI).

10

Читати в документації

Коментарі

Увійдіть, щоб залишити коментар

Будьте першим, хто залишить коментар!

Читайте також

Filament v5.10.0
Новини 12 жовтня 2026

Filament v5.10.0: сітка в rich editor, скелетони таблиць і десятки виправлень

Вийшов Filament v5.10.0: елементи керування сіткою в rich editor, допоміжний контент для віджетів-графіків, скелетони завантаження таблиць, submitOnCompletion() для OneTimeCodeInput та багато виправлень авторизації, доступності й стану.

22
Laravel AI SDK на практиці
Новини 09 жовтня 2026

Laravel AI SDK на практиці: агент, що стоїть за There There

Фрік Ван дер Гертен розповідає, як у Spatie побудували AI-шар хелпдеска There There на Laravel AI SDK: клас агента, інструменти з типізованою JSON-схемою та делегування роботи звичайним domain-діям.

18

Пакети за темою

Laravel Cookie Consent

devrabiul/laravel-cookie-consent

GDPR-сумісне рішення для управління згодою на використання файлів cookie в Laravel-додатках з повністю настроюваними банерами cookie, детальним контролем згоди та корпоративними функціями відповідності нормам.

189 v2.2 13 4