【问题标题】:PHP error handling with .htaccess使用 .htaccess 处理 PHP 错误
【发布时间】:2012-02-11 17:38:16
【问题描述】:

我已经阅读了几篇关于网站安全的文章,他们建议将此代码添加到您的 .htaccess 文件中以防止显示 PHP 错误:

# supress php errors
php_flag display_startup_errors off
php_flag display_errors off
php_flag html_errors off
php_value docref_root 0
php_value docref_ext 0

如果我将此代码 直接 添加到我的 .htaccess 文件中,我会收到 500 内部服务器错误。它出什么问题了?这都是弃用的东西吗?

【问题讨论】:

    标签: php apache security .htaccess


    【解决方案1】:

    它实际上依赖于PHP SAPI。这种精确的.htaccess 语法仅适用于mod_php 设置,不适用于CGIFastCGI 安装。在后一种情况下,您将改用.user.ini(PHP 5.3 及更高版本)。

    但是,您拥有的大多数选项都可以在运行时进行配置。在调用脚本顶部使用ini_set()

    ini_set("display_errors", 0);
    

    请注意,对于_startup_errors,在此处进行配置显然为时已晚。如果display_errors 已经关闭,禁用html_errors 和docref 的东西也是多余的。

    【讨论】:

    • 该代码ini_set("display_errors", 0); 是否会禁用 all php 错误?
    • 它将禁用所有错误的显示。使用默认错误处理程序。它不会影响日志记录或自定义错误处理程序。而error_reporting(0); 也会有同样的结果。
    • 关闭 html 错误并不是多余的。 PHP 也很高兴地将 HTML 写入文本日志 :)
    【解决方案2】:

    为了安全起见,最好不要显示错误,但记得确保它们的日志记录已启用,这样您就可以看到站点中发生的错误并追踪其来源。

    在 .htaccess 中你可以写:

    php_flag display_errors off
    php_flag log_errors on
    php_flag track_errors on
    php_value error_log /path/php_error_log
    

    此外,由于您使用的是 .htaccess,因此您可以拥有自己的自定义错误页面:

    ErrorDocument 401 /error401.html
    ErrorDocument 403 /error403.html
    ErrorDocument 404 /error403.html
    ErrorDocument 500 /error500.html
    

    【讨论】:

      【解决方案3】:

      最好的选择是禁用 php.ini 中的错误,因为在某些情况下,如果您通过 .htaccess 执行此操作,则会出现内部服务器错误。 ;)

      【讨论】:

      • 禁用错误报告就像把事情扫到地毯下一样,并且存在安全风险。记录错误可以让人们发现问题并解决它们。
      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 2017-02-17
      • 1970-01-01
      • 2023-03-04
      相关资源
      最近更新 更多