2

我很想知道什么被认为更安全

include $_SERVER['DOCUMENT_ROOT'] . '/config/special.php';

include '../config/special.php';

我在 Stack Overflow 和网络上的其他地方看到很多答案,说要在文档根目录之外存储数据。我还看到很多教程说在 php 中包含一个文件做类似的事情

include $_SERVER['DOCUMENT_ROOT'] . '/config/special.php';

如果您将文件夹的权限更改为 drwxr-x-wx 之类的权限,是否可以执行上述操作,这样如果您尝试访问 url 中的路径(或者这仍然被认为是一种风险)或将最好将我的配置移动到我的根文件夹上方,如下所示。

include '../config/special.php';
4

2 回答 2

3

答案是:“服务器的其余部分有多安全”?

如果您禁止从 Apache 远程调用访问该目录,那么无论您将文件存储在何处,您都解决了一半的问题。然而,这并不是安全的灵丹妙药。如果是这样,人们会知道的!(我在一个月前工作的地方证明了这一点 - 一位主要开发人员认为将内容存储在非 webroot 子文件夹中可以确保一切安全。他对他构建的文件浏览器知之甚少,更重要的是,它如何能够将../其作为参数并相应地工作...... 30 秒后,数据库被转储 - 在开发环境中)。

安全的关键是强化一切。如果您允许用户读取文件,请确保禁止..and...运算符以及与之相关的任何内容,以防止他们遍历目录链。防止外部用户读取文件(.htaccess使用 Apache),这应该会阻止大多数人。

但是,根据您对 up-one 和 up-two 链的消毒方式,您最终可能会遇到更多问题。再举我同事的例子:转储后,他决定操作这些替换:

.. => .
... => .

(顺序很重要)

他几乎不知道我投入了...... 第一个正则表达式会把它变成..,第二个正则表达式什么也不做。宾果游戏,数据库被倾倒了。再次。

于 2012-11-28T10:42:17.223 回答
0

如果您正在寻找 PHP 问题的直接答案,请在更广泛更简洁的说明中。

以上都不是安全的或不安全的。简单地包含一个文件是任何 PHP 应用程序中正常且有保证的操作,并且安全不会受到上述任何方法的影响。

如果您想了解更多关于安全性的信息,我建议您阅读更多关于如何确保您的服务器/应用程序安全的信息。

也许这可能是一本不错的读物。

http://www.ibm.com/developerworks/opensource/library/os-php-secure-apps/index.html

于 2012-11-28T10:48:06.683 回答