为什么从htdocs目录中删除PHP文件是一个好习惯?

时间:2009-12-08 21:32:17

标签: php security

为什么从htdocs / public目录中删除PHP文件是一个好习惯? 无论如何它们都被解析了,对吗?

3 个答案:

答案 0 :(得分:8)

如果PHP文件在某些​​时候由于配置错误而解析 ,或者说是一个失败的解释器,则没有源代码的危险(并且可能密码)以明文形式向全世界揭示。

此外,将.php文件重命名为.php.bak等人为错误的方式也不那么危险。

几年前我曾经有过这样的事情,当时一位来自Perl世界并且完全不了解PHP的同事决定在我们共享的服务器上将“short_open_tags”设置为“off”,因为short_open_tags与一些人混淆了他去过的XML实验(<?xml version="1.0"?>)。 很有趣! :)

还有第二件事:

调用包含脱离背景

在Web根目录下包含(即包含在其他地方的PHP代码片段)使您可能容易受到直接调用这些包含的人的影响,可能会绕过安全检查和初始化。

如果您不能/不会避免PHP代码驻留在Web根目录中,请至少确保启动每个文件以检查它是否在正确的上下文中运行。

在主脚本中设置:

define ("RUNNING_IN_SCRIPT", true);

并将其添加到每个包含的第1行:

if (!defined("RUNNING_IN_SCRIPT")) die ("This file cannot be called directly.");

答案 1 :(得分:2)

是的,他们被解析了。但是,这完全取决于您或服务器管理员没有搞砸配置文件。

在Apache忘记解析PHP之前,只需要在Apache配置中快速输入错误(我已经发生了这种情况)。由于Apache之后不知道如何处理PHP文件,因此源代码只能以纯文本形式输出,并且可以立即复制。哎呀,它甚至被缓存在用户的浏览器中,因此恶意用户可以快速复制所有代码并在以后方便地浏览它,寻找安全漏洞。

即使是一秒钟,您也不希望您的来源可见。如果htdocs目录中没有代码文件,则不会发生这种情况。但是,它们可以很容易地从目录外部包含在您的代码中。

许多MVC框架都将此沙盒方法用于此目的。

答案 2 :(得分:1)

您拥有的可执行文件越多,您的安全风险就越大:

  • 如果配置(它发生!)出现问题,并且包含数据库凭据的PHP文件的源代码会发送到浏览器,该怎么办?
  • 如果其中一个文件中有一些“坏”的东西,你没有考虑过,而且没有人测试过怎么办?

您拥有的PHP可执行文件越少......嗯,这是您不必关心的几个潜在问题。


这就是为什么它通常被认为是最好的:

  • 只在文档根目录下放置必须通过Apache 调用的PHP文件(例如index.php
  • 并在文档根目录之外放置未直接访问的PHP文件,但仅包含在第一个中的文件(例如,库/框架)