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