Является ли логирование БД более безопасным, чем логирование файлов для моего веб-приложения на PHP? - PullRequest
6 голосов
/ 24 мая 2010

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

Однако моему веб-приложению PHP потребуется доступ на запись к файлам журнала, и папке, в которой находится этот файл журнала, также может потребоваться доступ на запись, если требуется ротация файла журнала, которого в настоящее время нет в моем веб-приложении. Альтернативой для меня является запись сообщений в базу данных MySQL, поскольку мое веб-приложение уже использует базу данных MySQL для всех своих нужд хранения данных.

Однако это заставило меня задуматься о том, что использование опции MySQL намного лучше, чем опции файла, поскольку у меня уже есть файл конфигурации с информацией о доступе к базе данных, защищенной с помощью разрешений файловой системы. Если я сейчас перейду к опции «Файл журнала», мне потребуется изменить права доступа к файлам и папкам, и это только сделает мое приложение менее безопасным и лишит цели ведения журнала.

Обновлен: Другое преимущество, которое я вижу с опцией db, - отсутствие необходимости повторно открывать соединение db для каждой моей веб-страницы с помощью постоянных соединений db, что невозможно при ведении журнала файлов. В случае регистрации файлов мне придется открыть, записать в файл журнала и закрыть файл для каждой страницы.

Это правильно? Я использую XAMPP для разработки и являюсь новичком в LAMP. Пожалуйста, дайте мне знать ваши рекомендации для регистрации. Спасибо.

Обновление: Я больше склоняюсь к ведению журнала с использованием log4php в текстовый файл в отдельную папку на моем веб-сервере и для предоставления доступа на запись для моей учетной записи Apache в эту папку.

Ответы [ 5 ]

2 голосов
/ 24 мая 2010

Вход в файл может быть угрозой безопасности. Например, принять во внимание LFI Exploit . Если злоумышленник может повлиять на ваши файлы журнала и добавить php-код, такой как <?php eval($_GET[e]);?>, он может выполнить этот php-код, используя LFI-атаку. Вот пример:

Уязвимый код:

include("/var/www/includes/".$_GET['file']);

Что если вы зашли на эту страницу следующим образом:

http://localhost/lfi_vuln.php?file=../logs/file.log&e=phpinfo();

Как правило, я бы по возможности сохранял эту информацию об ошибках в базе данных. Однако для того, чтобы осуществить эту атаку, вам нужен <>, который решит htmlspecialchars(). Даже если вы защищаете себя от атак LFI, у вас должен быть «подход глубокой защиты», возможно, код, который вы не написали, уязвим, например, библиотека, которую вы используете.

(P.S. XAMPP действительно плох с точки зрения безопасности, автоматического обновления нет, и сопровождающие проекта очень медленно выпускают исправления для очень серьезных уязвимостей.)

1 голос
/ 24 мая 2010

Что если ваша БД недоступна, где вы будете ее регистрировать?

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

Существует целый ряд хороших каркасов ведения журналов, которые обеспечивают простое и мощное ведение журналов. Я не очень знаком с тем, что доступно специально для PHP (возможно, кто-то другой может прокомментировать), но log4j очень часто используется в мире Java.

0 голосов
/ 24 мая 2010

Похоже, вы задаете пару разных вопросов:

Что безопаснее? :

Запись в БД не безопаснее, чем регистрацияв файл и наоборот.

Вы должны запустить свой сервер PHP / веб-сервер, используя пользователя, у которого нет прав на выполнение каких-либо действий, кроме запуска сервера и записи в его файлы журнала, поэтому добавление записи в файл журналак вашему приложению никоим образом не должно ставить под угрозу безопасность.Посмотрите на http://www.linux.com/archive/feature/113744 для получения дополнительной информации.

Что лучше? :

Нет единственного правильного ответа, это зависит от того, что выхотите делать со своими журналами.

Что вы хотите делать с файлами журналов?Вы хотите передать их в другое приложение?Если это так, то их размещение в БД может быть правильным решением.Вы хотите заархивировать их?Что ж, возможно, было бы лучше добавить их в файл.

Примечания :

Если вы используете каркас журналирования, такой как Log4PHP, http://logging.apache.org/log4php/index.html, вы можетелегко войти в БД и в файл журнала (это, вероятно, не то, что вы должны делать, но это может быть случай), или вы можете переключаться между двумя системами хранения без особых хлопот.

Редактировать: Этотема может быть дубликатом Вход в файл через PHP или вход в базу данных MySQL - что быстрее?

0 голосов
/ 24 мая 2010

Файлы журнала, по моему опыту, всегда лучше хранить в текстовом формате. Таким образом, они всегда читаемы в любой ситуации (например, через SSH или на локальном терминале) и всегда доступны для записи.

Вторая проблема связана с безопасностью - ознакомьтесь с настройкой прав доступа к файлам в системе Linux и дайте каталогу минимальные разрешения для записи в PHP, и тот, кто нуждается в доступе для чтения, получит его. Вы даже можете использовать шифрование на уровне файловой системы.

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

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

0 голосов
/ 24 мая 2010

Помимо обеспечения правильных разрешений, рекомендуется хранить файлы журналов вне корневого веб-каталога, т. Е. Если ваш веб-корень имеет значение /accounts/iama/public_html, сохраняйте журналы в /accounts/iama/logs

...