【问题标题】:Download only by Session仅按会话下载
【发布时间】:2015-06-02 00:58:28
【问题描述】:

假设我想在我的服务器上的某个目录下托管一些 pdf 文件(例如 domain/myfiles )。出于这个原因,我创建了一个独特的 - 难以猜测 - 链接,使用一些常见的 php 函数,然后将文件放在这个特定目录中(domain/myfiles/hardToGuessHash.pdf)。

但是,如果有人通过domain/myfiles/hardToGuessHash.pdf 访问我的服务器,他将能够看到并下载此文件。

有什么方法可以提前要求session access,以阻止对我的文档进行未经授权的访问?我在 StackOverflow 上搜索过,但我真的没有想到什么。

澄清:我不想隐藏下载链接。我想要求验证才能下载。例如,如果 A 人 - 对文件具有下载权限 - 复制 - 将下载链接粘贴到 B 人身上,那么 B 人应该无法下载文件,只能从链接中下载!

谢谢!

【问题讨论】:

  • 在谷歌搜索“隐藏文件下载 php”后发现了这个 stackoverflow.com/q/17533806stackoverflow.com/q/10997516,您可以从那里进一步搜索,甚至将“会话”添加到该关键字列表中。如果需要,只需在会话上使用条件语句并作为附加方法; 如鱼得水。理想情况下,使用数据库也可能被证明是有益的。此外,您可以将文件置于您网站的公共空间之外。
  • @Fred-ii- 也许我应该澄清一下我不想隐藏 url 链接。我会更新问题。
  • 放置在根目录之外,通过 php 文件提供服务,该文件将检查会话
  • @Dagon 麻烦在于该链接,是他们可能会将直接链接传递给其他人。就我个人而言,我会像你说的那样在我对 OP 所说的根目录之外使用链接和/或数据库。这里的游戏名称是“防止未经授权的访问”,OP似乎不想使用并且“应该”使用。

标签: php file-management


【解决方案1】:

所以将文件存储在文档根目录之外——那么没有人可以直接访问。

所有文件都通过检查会话的 php 页面被切断:

<?php
session_start();
if (isset($_SESSION['logged_in'])) { //or what ever session check you like
  $file = '/this/is/the/path/file.mp3';

  header('Content-type: audio/mpeg');
  header('Content-length: ' . filesize($file));
  readfile($file);
}else{
echo 'you cant have the file';
}
?>

我承认偷了大部分Allow logged in user to Download File in PHP else nobody can't

【讨论】:

  • 嗯,绿色滴答声很快。就像我建议的那样,n'est-ce pas?
  • 达贡:谢谢!是的,当您发布时,我正在回复我的问题!它按预期工作:) Fred-ii-:哎呀!谢谢大家的帮助!
  • 佩服你的“诚实”呵呵
  • @Dagon 记得“开始会话”;-)
猜你喜欢
  • 2015-08-31
  • 1970-01-01
  • 1970-01-01
  • 2012-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2016-11-23
相关资源
最近更新 更多