为了安全起见,我将一组文件和文件夹移到apache服务器上的web根目录之外,然后我将动态地为它们提供服务.
这似乎比2个替代方案更好:
这似乎比2个替代方案更好:
>让他们可以访问Web,只需创建一个PHP登录页面,该页面将被添加到每个文件中.问题是它们不是所有的PHP文件,我不能将PHP登录文件添加到pdf,图像等.
>让他们可以访问Web并使用HTTP身份验证来限制对整个目录的访问.但是这会引入问题,包括明文密码,没有优雅的注销方法等.
所以我们回到将它们置于Web根目录之外,但动态地为它们提供服务.我遇到的问题是,因为它们都是不同的文件类型(PHP脚本,txt,pdf,jpg)我不确定是否应该使用include()或readfile().我遇到的问题是为每个文件发送正确的标头,以便浏览器正确显示它们.
我觉得这样的事情会起作用:
<?PHP $path = realpath(dirname(__FILE__) . '/../my_files/' . $_GET['file']); $parts = explode('/',pathinfo($path,PATHINFO_DIRNAME)); if (end($parts) !== 'my_files') { // LFI attempt exit(); } if (!is_file($path)) { // file does not exist exit(); } header('Content-Type: ' . mime_content_type($path)); header('Content-Length: ' . filesize($path)); readfile($path);