Я признаю, что название - это, в основном, уловка 22, но оно совершенно актуально, поэтому, пожалуйста, потерпите меня немного ...
Фон
Как некоторые могут знать, яработая над PHP-фреймворком, основной целью которого является соединение функциональности между различными CMS / системами.С точки зрения разработчика, существует обширный механизм обработки ошибок и ведения журнала.Прямо сейчас есть две настройки, DEBUG_MODE
и DEBUG_VERBOSE
, которые управляют выводом отладки.
Режим описывает среду, а подробный управляет количеством деталей.Короче говоря, есть режим, называемый «консоль», который в основном выводит отладочную информацию в консоль javascript (которая теперь доступна в главном веб-браузере рядом с вами).
Проблема
Это[система отладки] прекрасно работает для серверов разработки, но вы абсолютно не можете использовать ее на производственном сервере, поскольку подробности отладки (включая учетные данные БД и т. д.) публикуются публично .И, честно говоря, кто когда-либо безупречно мигрировал с сервера dev. на prod. каждый раз?
Решения
Поэтому яЯ пытался найти способ исправить это.Среди предложенных мной решений:
- Наличие параметра, который сообщает каркасу, что протоколирование должно включаться, только если запрос поступает с определенного IP-адреса.Проблемы безопасности для этого довольно очевидны (IP-спуфинг среди прочих).
- Наличие параметра, содержащего выражение PHP (код), которое получает eval'd, и его возвращение используется как да / нет.Самое приятное то, что установленный фреймворк может предлагать специфичные для CMS выражения, например:
- Wordpress:
current_user_can('manage_options')
- Joomla:
$user=&JFactory::getUser() && ($user->usertype=='Super Administrator') || ($user->usertype=='Administrator')
- Пользовательский:
$_SERVER['REMOTE_ADDR']=='123.124.125.126'
- Это из двух, я хочу выслушать еще больше предложений.
Итак, как вы думаете, eval()
должно быть до этого?Я гарантирую, что он все еще работает хорошо, делая это только один раз для загрузки / запроса страницы.
Уточнение
if(DEBUG_MODE!='none')echo 'Debug'; // this is how it is now
if(DEBUG_MODE!='none' && $USER_CONDITION)echo 'Debug'; // this is how it should be
$USER_CONDITON
позволяет такие вещи, как запускis_admin()
, чтобы все администраторы могли видеть отладочную информацию, или getUser()->id==45
, чтобы включить ее для определенного пользователя.Или по IP, или как угодно.