我承认标题主要是第 22 条,但它是完全相关的,所以请耐心等待我...
背景
有些人可能知道,我正在开发一个 PHP 框架,其主要卖点是在不同 CMS/系统之间桥接功能。从开发人员的角度来看,有一个广泛的错误处理和日志记录机制。现在,有两个设置DEBUG_MODE
和DEBUG_VERBOSE
,它们控制调试输出。
模式描述了中等,详细控制了细节的数量。简而言之,有一种称为“控制台”的模式,它基本上将调试信息转储到 javascript 控制台(现在可以在您附近的主要 Web 浏览器中使用)。
问题
这个 [调试系统] 非常适合开发服务器,但您绝对不能在生产服务器上使用它,因为调试详细信息(包括数据库凭据等)会公开发布。老实说,谁曾经从开发者那里迁移过来。到一个刺激。服务器每次都完美无瑕?
解决方案
因此,我一直在想办法解决这个问题。我提出的解决方案包括:
- 有一个设置告诉框架仅当请求来自某个 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'
- WordPress:
- 这些是两者之间的,我渴望听到更多的建议。
那么,你认为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,或其他任何方式。