当前位置: 首页 > 面试题库 >

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

谷梁英毅
2023-03-14
问题内容

为了安全起见,我将文件和文件夹的集合移到apache服务器上的Web根之外,然后我将为它们提供动态服务。这似乎比2个替代方案要好:

  1. 让他们可以访问网络,只需创建一个php登录页面即可,该页面会附加到每个文件中。问题是它们不是全部的php文件,而且我不能将php登录文件添加到pdf,图像等文件中。
  2. 使他们可以访问网络,并使用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);


 类似资料:
  • 我试图在根目录外的文件夹中保存一个文件,然后读取它的内容。 例如,我的工作目录是/var/www/html/project_folder,我想将文件保存在/var/www/new_folder中 我使用的是Laravel5.2,所以我的根路径是/var/www/html/project\u folder/public 我已授予新文件夹的所有权限。我尝试了$\u SERVER['DOCUMENT\u

  • 问题内容: 如何使用Tomcat从Web应用程序外部的公共文件夹中提供图像文件?我不想在其他端口上使用第二个Apache文件服务器,因为图像文件是同一应用程序的一部分。而且我不想在webapps内部创建指向公共文件夹的符号链接,因为我的应用程序被部署为war文件....是否有一个更简单的解决方案,类似于将默认servlet用于webapps内部的静态内容,用于webapps外部的静态内容 问题答案

  • 问题内容: 在Golang中,我如何在根目录之外提供静态内容,同时仍具有用于提供主页的根目录处理程序。 使用以下简单的Web服务器作为示例: 如果我做 我收到一个恐慌,说我有两个针对“ /”的注册。我在互联网上找到的每个Golang示例都建议从不同目录中提供其静态内容,但这对于sitemap.xml,favicon.ico,robots.txt和其他按惯例或始终必须从根本上得到服务。 我要寻找的行

  • 问题内容: 我使用Flask并想更改资产文件夹目录。这是我的文件夹结构: 我想将静态文件夹下的所有文件夹移到该文件夹下。但是当我这样做时,我的css文件和其他文件无法加载页面。我应该为我的应用程序设置一个属性吗?我也尝试了以下方法: 但是无法做到这一点,还有其他方法吗? 更新: 当我在上方的行中删除前导斜杠时,出现了 带有追溯的错误: 问题答案: 初始化应用程序时,它应该是static_folde

  • 问题内容: 在Web应用程序中,我需要提供位于应用程序上下文目录外部的静态内容(图像)。整个应用程序体系结构要求我使用Tomcat来执行此操作。我以为可以从Spring的应用程序URL和目录内容之间配置映射而受益。但是AFAIK的属性仅处理上下文相关或类路径映射。因此,我想使用的是: 不起作用。因为我宁愿避免编写简单的文件传输servlet,所以如果有人可以给我一些有关基于Spring的现有解决方