如何授予对 public_html 目录之外的文件的下载访问权限?

2023-12-10

出于安全目的,我将文件存储在 public_html 文件夹之外。但是,我想以某种方式链接到特定文件,用户可以在其中下载这些文件之一。

我正在使用 jquery 脚本,它允许我指定服务器 PATH 作为上传文件夹,并且它会在 public_html 文件夹之外上传。

唯一的问题是它要求我指定用于下载文件的“上传路径”的 URL。我想我也许可以做这样的事情:

public_html/redirect (contains htaccess which forwards all requests to "hiding" folder)

hiding (outside public_html)

A user clicks /redirect/file.doc and they download a file located at hiding/file.doc

这可能吗?如果没有,我如何授予对 public_html 目录之外的文件的特定文件下载访问权限?我知道我以前在其他脚本上见过它......


您可以使用“php 下载处理程序”来执行此操作:

您可以使用这样的方法将文件内容和文件信息头返回到用户浏览器,只需确保在此之前没有输出任何其他内容即可。

我建议您将其放入单独的文件中并调用它download.php.

function returnFile( $filename ) {
    // Check if file exists, if it is not here return false:
    if ( !file_exists( $filename )) return false;
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    // Suggest better filename for browser to use when saving file:
    header('Content-Disposition: attachment; filename='.basename($filename));
    header('Content-Transfer-Encoding: binary');
    // Caching headers:
    header('Expires: 0');
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
    header('Pragma: public');
    // This should be set:
    header('Content-Length: ' . filesize($filename));
    // Clean output buffer without sending it, alternatively you can do ob_end_clean(); to also turn off buffering.
    ob_clean();
    // And flush buffers, don't know actually why but php manual seems recommending it:
    flush();
    // Read file and output it's contents:
    readfile( $filename );
    // You need to exit after that or at least make sure that anything other is not echoed out:
    exit;
}

扩展它的基本用途:

// Added to download.php
if (isset($_GET['file'])) {
    $filename = '/home/username/public_files/'.$_GET['file'];
    returnFile( $filename );
}

Warning:

这是基本示例,没有考虑到用户可能会尝试利用某些邪恶的优势$_GET没有经过适当消毒。

这基本上意味着用户可以检索passwd文件或一些其他敏感信息(如果某些条件适用)。

例如,检索/etc/passwd:

只需将浏览器指向http://server.com/download.php?file=../../../etc/passwd服务器返回该文件。因此,在真正使用之前,您应该了解如何正确检查和清理用户提供的任何参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何授予对 public_html 目录之外的文件的下载访问权限? 的相关文章

  • 图像随机损坏(但刷新后加载)并显示“资源解释为图像但使用 MIME 类型 text/html 传输”

    我目前正在开发一个简单的 php 网站 问题是 我的整个网站中的图像 发生在所有 php 文件中 随机损坏并显示错误资源解释为图像 但以 MIME 类型 text html 传输但是 如果我尝试多次刷新页面 可以再次加载图像并且错误消失 我
  • 按文件名对 $_FILES 进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 他俩 如您所知 在新的 HTML5 中 您可以非常轻松地上传多个文件 但我这里的问题是如何按列 名称 对 FILES 数组进行排序 这是
  • Yii2 - 错误请求 (#400) |前端和后端cookie

    仅当我打开时才会出现此问题frontend and backend在相同的browser 设想 与后端交互 gt 切换选项卡 gt 与前端交互 gt 切换选项卡返回 gt 与后端交互 gt 错误请求 400 Cookie 后端 identi
  • 适用于 Linux 的轻量级 IDE [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • PHP WCF 集成

    是不是如果我想支持php客户端访问我的服务 我必须有一个基本的http端点 这是因为php仍然只支持soap 1 1吗 据我所知 自从我使用 PHP 以来已经两年了 情况仍然如此 如果客户端应用程序将使用 PHP 的内置 SoapClien
  • 您的要求无法解析为 laravel 的一组可安装软件包

    我使用 5 7v Laravel 和 7 2 1v PHP 和 Composer 最新版本 但是当我想创建新项目时出现这些错误 Your requirements could not be resolved to an installabl
  • 如何从网站网址中隐藏 .html 扩展名

    我知道这个问题以前曾被问过 但有人知道隐藏 html 扩展名的好方法吗 我已经尝试了许多代码和许多答案https stackoverflow com https stackoverflow com 但我没有看到结果 那是我再问你一次 我有一
  • 在哪里可以学习网络编程从入门到精通? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我尝试做教程 但它是无组织且无结构的 我在哪里可以学习 PHP 从初学者到大师 我正在寻找类似的网站w
  • 在 PHP 字符串中格式化 MySQL 代码

    是否有任何程序 IDE 可以在 PHP 字符串中格式化 MySQL 代码 例如 我使用 PHPStorm IDE 但它无法做到这一点 它对 PHP 和 MYSQL 执行此操作 但不适用于 php 字符串内的 MYSQL 我已准备好使用新的
  • 如何在 Windows 上安装 Zend 框架

    安装 Zend Framework 就是这么简单 是的 对 好吧 我正在写一本初学者的书 有一件不太详细的事情是最重要的部分 安装该死的东西 浏览了几个小时的快速入门指南后 它只说 下载 Zend 添加包含目录 bla bla 然后就完成了
  • 重定向并保留我的图标

    我想知道当您单击 facebook 上的链接时 facebook 重定向如何保留其 favicon 并使用 FB favicon 打开新选项卡 我想知道如何实现这一点 它不是 iframe 所以我怎么能做这样的事情 我应该从哪里开始 当重定
  • 从 Laravel 4 输入生成新数组

    我使用 Input all 从动态生成的表单中获取一些输入 我使用 jQuery 来允许用户添加字段 字段名称为 first names last names 和 emails input 变量现在看起来像这样 array size 4 t
  • 字符串相似度的算法(比Levenshtein和similar_text更好)? php, Js

    在哪里可以找到比 levenshtein 和 phpimilar text 方法更准确地评估错误字符的拼写的算法 Example similar text jonas xxjon similar echo similar returns 6
  • PHP 中的 -> 和 :: 有什么区别?

    这个东西困扰我好久了 一直找不到 在 php 中使用 和 gt 之间的类有什么区别 让我举个例子 想象一个名为 MyClass 的类 该类中有一个函数 myFunction 使用有什么区别 MyClass myclass new MyCla
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • session_start():无法解码会话对象

    我有时在使用 CodeIgniter 时遇到以下问题 错误 2019 03 05 19 57 26 gt 严重性 警告 gt session start 无法解码会话对象 会话已被销毁 system libraries Session Se
  • PHP 表单 - 带验证蜜罐

    我有以下内容 效果很好 但对垃圾邮件机器人开放 我想放入蜜罐 而不是验证码 下面的代码适用于验证姓名 电子邮件 消息 但我无法让它与蜜罐一起工作 任何人都可以查看 蜜罐 代码并告诉我如何修复它吗 我希望表单给出 success2 不允许垃圾
  • PHP 拒绝从 var_dump、print 等输出数据

    我目前正在运行 WAMP 服务器 并且在过去的 30 分钟内一直在尝试弄清楚我的项目如何以及为什么不会输出任何指定的 PHP 数据 起初我以为是因为我有一个 htaccess文件的output buffering被禁用 所以我删除了它 仍然
  • 矩形超出边界是什么意思

    PPB Graphics2D PaintImageData 矩形超出界限是什么意思 我几乎在我检查的每一段代码中都看到了它 最新的代码是 define my consumer key define my consumer secret oa
  • 如何从日期中查找该月的最后一天?

    如何在 PHP 中获取该月的最后一天 Given a date 2009 11 23 我要2009 11 30 并给出 a date 2009 12 23 我要2009年12月31日 t返回给定日期所在月份的天数 请参阅的文档date ht

随机推荐

  • @Autowired 与 JUnit 测试

    我使用了 JUnit 但有些测试存在一些问题 这些测试在 Spring bean 内有 Autowired 注释 当我引用它们时 Autowired 的 bean 始终为 NULL 这是示例代码 public class Test prot
  • 如何将矩阵的索引映射到一维数组(C++)?

    我有一个 8x8 矩阵 如下所示 char matrix 8 8 另外 我有一个包含 64 个元素的数组 如下所示 char array 64 然后我将矩阵绘制为表格 并用数字填充单元格 每个数字从左到右 从上到下递增 例如 如果我在矩阵中
  • StackOverflow 对标签弹出窗口使用什么类型的动画? [关闭]

    Closed 这个问题是无关 目前不接受答案 有谁知道 Stackoverflow 的标签弹出窗口使用什么类型的 jQuery 动画 我所说的标签弹出窗口是指当您将鼠标悬停在 Stackoveflow 中的标签上时 会出现一个弹出窗口 动画
  • 将列号转换为字母的函数?

    有谁有可以从数字返回列字母的 Excel VBA 函数吗 例如 输入100应该返回CV 此函数返回给定列号的列字母 Function Col Letter lngCol As Long As String Dim vArr vArr Spl
  • Google Sheets:自定义函数中的日期格式

    我在谷歌表格中有以下自定义函数 我尝试在自定义函数中调用内置函数 TEXT 但没有成功 Google表格会提示 未知 功能 TEXT 有解决办法吗 function NextMonth StockTradeDate var DeltaDat
  • 通用应用程序 Windows Phone 方向

    最近 我正在为 Windows Phone 和 Windows Store 开发一个通用应用程序 在该应用程序中 我试图将应用程序的方向修复为横向 但在 Windows Phone 8 1 的基于 WinRT 的应用程序中 我找不到任何方向
  • 如何在 vim cscope 结果窗口中搜索

    当我们使用 cscope 去 vim 中定义一个符号时 结果窗口中可能会显示很多候选符号 我想在窗口内进行搜索以快速找到我需要的内容 但是搜索功能 在结果窗口中似乎不起作用 只有几个键可用 j k gg G等 无论如何可以在 cscope
  • 根据正则表达式匹配对字符串列表进行排序

    我有一个看起来有点像的文本文件 random text random text can be anything blabla A blabla random text random text can be anything blabla D
  • cakephp - 如何处理完整性约束违规错误

    我在这里不知所措 我需要知道如何在违反完整性约束的情况下处理错误消息 意思是我想向用户显示一些有意义的消息 而不是显示错误消息 例如 Error SQLSTATE 23000 Integrity constraint violation 1
  • 在成员函数中测试 this 指针在 C++ 中合法吗?

    我有一个涉及不同类类型的对象的应用程序 对象由指针引用 空指针表示关联的对象不存在 目前调用代码很麻烦 因为每次使用指向对象的指针时 都会测试指针值是否为空 并采取一些适当的操作来判断是否为空 因为在不存在的情况下要采取的默认操作取决于对象
  • 如何在Sed中查找[]内的文本?

    这与已经被问过的问题类似 但是 我正在寻找 Sed 的具体答案 我有类似以下内容的文字 一些示例文本 带有一些额外的文本 foo 我需要只抓取括号内的文本 到目前为止我的尝试都是徒劳的 我可以使用其他工具解析该行 但我似乎无法让 Sed 正
  • -std=c++11 和 -std=gnu++11 有什么区别?

    两者有什么区别 std c 11 and std gnu 11作为 gcc 和 clang 的编译参数 同样的问题与c99 and gnu99 我了解 C 和 C 标准 我感兴趣的是参数的差异 我在某处读到它与某些扩展有关 但我不清楚哪些扩
  • 托管 Flash 不会加载 swf 资源(xml、图像等)

    我首先尝试在我的unix机器上使用gtk2实现swf阅读器 成功了 我可以渲染简单的 swf 文件 现在 我尝试使用 xml 配置向 flash 文件添加配置 添加图像等 失败 无法通过 geturlnotify 这是我的代码 includ
  • 如何给一个命令指定多个名称?

    我有一个命令 bot command pass context True async def hellothere ctx await Bot say Hello format ctx message author 我想复制这个更短的命令
  • 按值获取所有数组键

    假设我有一个这样的数组 Array Start gt Array Item 1 gt Array 0 gt Item 1 1 Item 2 1 gt Array Item 2 1 1 gt x 1 gt Item 3 1 0 gt Item
  • 为什么 Oracle 存在长期问题?

    为什么 Oracle 存在长期问题 如果有人能告诉我在oracle中使用long数据类型有什么问题那就更好了 与存储有关的东西 我在一次采访中被问到这个问题 LONG 已经过时且已被弃用 并已被 CLOB 取代 LONG 有很多限制 并且很
  • 为什么 ggplot 在指定其他颜色时使用默认颜色?

    我试图让 ggplot2 将直方图的一行显示为与其余部分不同的颜色 在这方面我已经成功了 但是 当指定不同的颜色集时 ggplot 将使用默认颜色 我确信我的代码中有错误 但我无法确定它在哪里 数据和代码如下 创建数据 library gg
  • Matplotlib colorbar:如何手动设置间隔?

    我使用以下代码片段创建自定义颜色条 import pylab as pl import numpy as np a np array 0 10000 100000 400000 500000 pl figure figsize 9 1 5
  • 使用 PHP/Apache 限制对静态文件(html、css、img 等)的访问

    假设您的服务器上的目录中有大量 html css js img 等文件 通常 互联网上的任何用户都可以通过简单地输入完整的 URL 来访问这些文件 如下所示 http example com static files sub index h
  • 如何授予对 public_html 目录之外的文件的下载访问权限?

    出于安全目的 我将文件存储在 public html 文件夹之外 但是 我想以某种方式链接到特定文件 用户可以在其中下载这些文件之一 我正在使用 jquery 脚本 它允许我指定服务器 PATH 作为上传文件夹 并且它会在 public h