目录的PHP安全性

时间:2013-07-13 01:24:41

标签: php security

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

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

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

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

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

chdir($_SERVER['DOCUMENT_ROOT']);

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

提前谢谢!

1 个答案:

答案 0 :(得分: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。由于大概该文件路径不存在,服务器会回复404并且您会得到一个损坏的图像。

(*:嗯......除非你的文档根目录恰好有<之类的HTML特殊字符,这是不太可能的。但是,你总是htmlspecialchars()你要放入的任何变量值一个HTML页面,以避免HTML注入问题。)

  

CHDIR($ _ SERVER [ 'DOCUMENT_ROOT']);

这没有任何作用。 Web服务器本身提供相对于文档根目录的图像 - 您的PHP脚本都不会为图像请求运行。