-1

我想知道我的方法是否既安全又是实现文件引用的好方法。我了解您可以使用:

include $_SERVER['DOCUMENT_ROOT'] . "includes/config.php"

引用 PHP 脚本中的文件。但是,我认为如果我在庄园中使用相同的调用,这将是一个安全漏洞,例如:

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] ?>/images/image.jpg" />

因为我的基本文件目录将对前端用户可见。为了解决这个问题,我最终在我的 config.php 文件(在每个页面上执行)中添加了一个命令来执行此操作:

chdir($_SERVER['DOCUMENT_ROOT']);

这样我总是知道我需要从根目录引用,前端用户将无法看到我的文件结构。这是一个好方法吗?

先感谢您!

4

1 回答 1

1

我假设如果我在庄园中使用相同的调用,这将是一个安全漏洞,例如:

<img src="<?php echo $_SERVER['DOCUMENT_ROOT'] ?>/images/image.jpg" />

这不是一个安全漏洞(*),它只是不起作用。<img src>是客户端访问的外部 URL 地址;DOCUMENT_ROOT是服务器脚本使用的内部文件地址。

文档根是对应于外部根 url ( /) 的文件系统路径。因此,如果您的文档根目录是/home/me/www-data,那么上面提供给浏览器的图像将是src="/home/me/www-data/images/image.jpg",浏览器将向服务器询问 URL /home/me/www-data/images/image.jpg,服务器将在文档根目录中查找该文件:/home/me/www-data/home/me/www-data/images/image.jpg。由于大概该文件路径不存在,因此服务器会回复 a404并且您会得到一个损坏的图像。

(*:嗯...除非您的文档根目录碰巧有 HTML 特殊字符,如<in,这是不太可能的。不过,您总是htmlspecialchars()将任何变量值放入 HTML 页面,以避免 HTML 注入问题。)

chdir($_SERVER['DOCUMENT_ROOT']);

这无济于事。Web 服务器自己提供相对于文档根目录的图像——您的任何 PHP 脚本都不会针对图像请求运行。

于 2013-07-13T12:52:43.000 回答