Безопасный способ регистрации трассировки исключений PHP (которая может включать разумные учетные данные)

КОНТЕКСТ

У меня есть веб-приложение, и я перехватываю свое исключение глобально, чтобы записать его в файл внутри моего приложения (/app/log/app.log). Общедоступная папка делает невозможным просмотр за пределами папки, поскольку она смонтирована для обслуживания клиента (/public/index.php).

Я также использую модифицированную версию Exception::getTraceAsString(), которая позволяет мне иметь полные строки вместо того, чтобы PHP усекал строки в этой трассировке (код действительно тривиален, я не буду помещать здесь класс, потому что он не имеет отношения к вопросу, который я задаю. ).

Вот пример того, как выглядит мой файл app.log:

2018-06-10 14:33:12.7016 (+02:00) [ERRO] Error of type PDOException catched
2018-06-10 14:33:12.7020 (+02:00) [DBUG] Error catched on line 22 of file C:\xampp\htdocs\my-app\app\bootstrap\database.php
2018-06-10 14:33:12.7026 (+02:00) [DBUG] #0 [internal function]: PDO->__construct('mysql:host=localhost;dbname=test;port=3306;adapter=;prefix=', 'root', '', Array)
2018-06-10 14:33:12.7028 (+02:00) [DBUG] #1 [internal function]: Phalcon\Db\Adapter\Pdo->connect(Array)
2018-06-10 14:33:12.7031 (+02:00) [DBUG] #2 C:\xampp\htdocs\my-app\app\bootstrap\database.php(22): Phalcon\Db\Adapter\Pdo->__construct(Array)
2018-06-10 14:33:12.7034 (+02:00) [DBUG] #3 C:\xampp\htdocs\my-app/public\index.php(7): include('C:\xampp\htdocs\my-app\app\bootstrap\database.php')

Зная, что я хотел бы избавиться от этой информации вне своего приложения, допустим, сервис SaaS для хранения и поиска в различных местах назначения журналов (которые потенциально могут быть видны сотруднику системы SaaS).

ПРОБЛЕМА

Как видите, мой app.log иногда может содержать разумный контент, например пароли.

ВОПРОС

Есть ли современный способ справиться с чувствительностью содержимого в наших трассировках журнала?

Кроме того, как насчет безопасности в отношении того факта, что в наших журналах видны абсолютные пути?

@ bxN5 Я обязательно проверю этот пакет OWASP, знаете ли вы, есть ли официальный эквивалент этого java-проекта, поддерживаемый OWASP?

Anwar 12.09.2018 10:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Is there a state-of-the-art way to handle the sensibility of the content in our log traces?

Also, what about the security regarding the fact that absolute paths are visible in our logs?

Лучшее, что вы можете сделать здесь, - это зашифровать журналы с помощью открытого ключа, для которого соответствующий секретный ключ известен только вашей операционной группе и / или разработчикам.

То есть я рекомендую использовать герметизация API для шифрования информации журнала.

Поскольку вы спрашивали о современном состоянии, я бы особо порекомендовал здесь sodium_crypto_box_seal() / sodium_crypto_box_seal_open(). (PHP 7.2+)

Вы лично пользуетесь этим механизмом? Можно ли выполнить этап дешифрования в моем браузере (используя, возможно, расширение в моем браузере), поскольку мне также понадобятся мои коллеги, не являющиеся разработчиками, чтобы они могли их расшифровать, или вы рекомендуете создать небольшое веб-приложение для решения этой проблемы?

Anwar 12.09.2018 10:54

Целью API-интерфейса запечатывания является то, что расшифровывать могут только ваши разработчики, а не произвольные браузеры. При этом да, я использую этот API в своих проектах.

Scott Arciszewski 12.09.2018 11:16

Другие вопросы по теме