加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何使用PHP从Web根外部提供文档?

发布时间:2020-12-13 13:27:14 所属栏目:PHP教程 来源:网络整理
导读:为了安全起见,我将一组文件和文件夹移到apache服务器上的web根目录之外,然后我将动态地为它们提供服务. 这似乎比2个替代方案更好: 让他们可以访问Web,只需创建一个php登录页面,该页面将被添加到每个文件中.问题是它们不是所有的php文件,我不能将php登录文件
为了安全起见,我将一组文件和文件夹移到apache服务器上的web根目录之外,然后我将动态地为它们提供服务.
这似乎比2个替代方案更好:

>让他们可以访问Web,只需创建一个php登录页面,该页面将被添加到每个文件中.问题是它们不是所有的php文件,我不能将php登录文件添加到pdf,图像等.
>让他们可以访问Web并使用HTTP身份验证来限制对整个目录的访问.但是这会引入问题,包括明文密码,没有优雅的注销方法等.

所以我们回到将它们置于Web根目录之外,但动态地为它们提供服务.我遇到的问题是,因为它们都是不同的文件类型(php脚本,txt,pdf,jpg)我不确定是否应该使用include()或readfile().我遇到的问题是为每个文件发送正确的标头,以便浏览器正确显示它们.

我错过了另一种神奇的解决方案是否有一个框架让我无法处理动态文件和标题的提供?

(仅供参考我在共享主机上运行Linux,Apache和PHP)

我觉得这样的事情会起作用:
<?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);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读