【问题标题】:error_reporting() has been disabled for security reasons出于安全原因,error_reporting() 已被禁用
【发布时间】:2013-01-16 19:24:57
【问题描述】:

我在 codeigniter 框架中做了一个项目并将其上传到主机,主机说该站点正在快速填充服务器的日志文件。

所以我检查了错误日志和我收到的每个请求:

error_reporting() has been disabled for security reasons /index.php on line 36
set_error_handler() has been disabled for security reasons /system/core/CodeIgniter.php on line 72

我问主持人是否可以打开这些选项,因为 codeigniter 需要它们来处理错误,但他们回答说我必须编辑我的代码才能在他们的服务器上禁用这些功能。

我不想编辑 codeigniter 的核心文件,我真的不明白为什么它被禁用。你们有谁知道解决此错误的简单解决方案,或者知道一些参数来告诉主机商为我更改此设置?

【问题讨论】:

  • 你真的应该改变主机,因为禁用 set_error_handler() 是荒谬的。例如,我使用此函数将错误转换为异常。
  • 你不能。简单的解决方法是编辑 codeigniter 核心文件,方法是禁用 index.php 和 CodeIgniter.php 中的 error_reporting 和 set_error_handler

标签: codeigniter hosting php


【解决方案1】:

error_reporting 功能可能被 Web 主机禁用的原因是为了防止错误的 PHP 程序向最终用户输出崩溃消息,黑客可以利用这些消息来计算如何访问服务器。 PHP 崩溃消息包含许多可能对黑客有用的详细信息,包括目录路径和有关正在使用的框架软件的信息。

通常认为对生产站点禁用错误报告是一种很好的做法,这样这些消息就不会显示给最终用户。将其打开以进行开发,将其关闭以进行生产。

这解释了您的主机禁用它的原因。

关于如何防止“错误报告禁用”消息进入日志:好吧,很遗憾,你不能,除非你编辑代码以删除对error_reporting的引用。

CodeIgniter 手册包含此页面:http://ellislab.com/codeigniter/user-guide/general/errors.html

在此页面上,它指出 error_reporting 代码在 index.php 中,并且他们鼓励您对其进行编辑,以便在您的代码投入生产后停止报告错误。

换句话说,CodeIgniter 说:“请改变这个”。所以不用担心不想更改核心文件(index.php 并不是真正的核心文件)。

【讨论】:

  • 我明白为什么您不想在实时站点上显示错误,这就是为什么我检查我所在的环境。如果它是实时站点,我将其设置为 error_reporting(0);但这仍然会在日志中产生此错误,因此我必须完全删除 index.php 中的环境代码。如果你问我,这不是一个大问题,但另一个错误来自 /system/core/CodeIgniter.php。这是codeigniter的核心文件。如果我删除它,每个 php 错误都会产生 500 服务器错误,如果你问我,这不是很漂亮。
  • @Bjorn -- 嗯,好吧,我猜其他评论者是对的;听起来您是时候寻找更好的虚拟主机了。
  • 禁用生产站点的错误报告通常被认为是糟糕的做法。在生产中,error_reporting 应该与开发服务器具有相同的值
猜你喜欢
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-30
  • 2016-02-07
相关资源
最近更新 更多