是否可以使用file_get_contents读取php文件?

时间:2016-08-28 15:51:45

标签: php security include file-get-contents include-path

我创建了从url get request加载(只是css,js)的网页。我之前使用include完成了此操作但这很危险,因为黑客可以包含不来自{{1}的文件我在public_html上尝试了这个,它说错误的请求是完美的,但我想确定,因为实际上我听说file_get_contents是危险的?我不想帮助黑客阅读php文件是因为我听说可以使用file_get_content

1 个答案:

答案 0 :(得分:0)

如果您使用用户提供的数据作为参数并打印其输出,则

file_get_contents()可能会有危险。然后恶意用户可以使用例如/etc/passwd读取所有服务器的用户名。或者,他/她可以使用'..'作为文件名的一部分来访问文件,即使您使用允许的路径添加名称(例如“../../ etc / passwd”)

为了防止这种情况发生,您应该始终检查用户给定的值是否有效,例如,文件名或路径是否在文件系统的预期部分中,因此只访问您希望用户访问的文件。 PHP具有使相对路径(或包含符号链接的路径)为“真实”的功能:realpath()

在创建“真实”路径后,您可以检查路径是否位于文件系统的预期部分,然后将其安全地用于file_get_contents()

$wanted = $_GET['path'];
$real = realpath('/var/www/user/accessible/' . $wanted);
if (strpos($real, '/var/www/user/accessible/') === 0) {
   echo file_get_contents($real);
} else {
   throw new Exception('not allowed to access this file');
}