我创建了从url get请求加载(只是css,js
)的网页。我以前对include
这样做过,但这是危险的,因为黑客可以包含不是来自public_html
的文件。我在file_get_contents
上尝试过,它说错误的请求,这是完美的,但我想确定,因为实际上我听说file_get_content
s是危险的?我不想帮助黑客读取php文件,因为我听说这是可能的file_get_contents
?
file_get_contents()
可能是危险的,如果您使用用户提供的数据作为参数并打印其输出。恶意用户可能会使用/etc/passwd
读取所有服务器的用户名。或者,他/她可以用'…’作为文件名的一部分来访问文件,即使你在文件名前加上了允许的路径(例如。". ./. ./etc/passwd)
为了防止这种情况发生,您应该始终检查用户给定值的有效性,例如,文件名或路径是否在文件系统的预期部分,因此只访问您希望用户访问的文件。PHP有一个函数来生成相对路径(或包含符号链接的路径)"真实"的:realpath () .
将路径设置为"real"后,您可以检查该路径是否位于文件系统的预期部分,然后安全地将其用于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');
}