我想知道我的方法是否安全且是实现文件引用的好方法。我知道您可以使用:
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引用,而前端用户将无法看到我的文件结构。这是一个好方法吗?
提前谢谢!
答案 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脚本都不会为图像请求运行。