【问题标题】:Unique/expiring urls [closed]唯一/过期网址[关闭]
【发布时间】:2016-05-07 21:28:42
【问题描述】:

我想使用一些系统来创建受保护/唯一的 url 用于下载和流式传输。例如我们有:

domain/file.mp4

为了让用户能够下载该文件,我想把它放在一个带有下载按钮和流媒体播放器的 php 页面中,这样它将是:

域名/下载?=file.mp4

在生成的php页面里面,下载地址是:

domain/file.mp4? AccessKeyId=AXIXI 

因此,用户将无法共享该链接。 我什至不知道这是否可能,只是在这里寻求一些想法。

【问题讨论】:

  • 有可能,但如果任何用户有'domain/download?=file.mp4&accessKeyId=AXIXI',他们仍然可以在朋友/整个互联网之间共享链接。您需要考虑像这样的注册、cookie 和 swizzle。
  • 您可以经常更改下载网址。
  • 您可以使用表单和验证码。或者带有时间限制令牌的表单。

标签: php html .htaccess


【解决方案1】:

使用 cookie 来验证下载链接。如果两者匹配,则允许下载。

例如,包含下载链接的 PHP 文件可以按如下方式生成:

<?php

  ///// Put these two lines in a shared config file: /////
    define('SALT','*** Insert a random string here ***');
    define('RESOURCES_DIRECTORY', '/home/eazy/files/');
  ////////////////////////////////////////////////////////

  function get_download_url($filename) {
    $expire = time() + 3600; // Link expires in 1 hour
    $auth_data = "f=$filename&e=$expire";
    $cookie_key = md5($auth_data . SALT);
    setcookie('key',$cookie_key,0,'/');
    return "/download.php?$auth_data";
  }

?>

<a href="<?= get_download_url('my_video.mp4') ?>" rel="nofollow">Download video</a>

然后/download.php文件就可以认证下载了,如下:

<?php

  $filename = @$_GET['f'];
  $expire = intval(@$_GET['e']);
  $auth_data = "f=$filename&e=$expire";
  $cookie_key = md5($auth_data . SALT);
  $file = RESOURCES_DIRECTORY . $filename;
  if (@$_COOKIE['key'] != $cookie_key || $expire < time() || !file_exists($file)) {
    header('HTTP/1.1 404 Not Found');
    die("File not found");
  }
  else {
    header('Content-Type: video/mp4');
    header('Content-Length: ' . filesize($file));
    readfile($file);
  }

如果您可以避免产生open_basedir restriction 错误,请将可下载文件存储在您的 WWW 目录之外。这样,用户就别无选择,只能使用此脚本访问文件,并且只有在访问包含下载链接的页面获得有效 cookie 时才能成功。

注意:此代码将阻止随意的链接共享,但不是超级安全,也不会阻止人们共享下载的文件。没有必要过于偏执,因为人们仍然可以共享下载的文件,即使他们无法轻松共享下载链接。

【讨论】:

  • 嗯,所以对于超级安全的系统(例如数字下载),我不能自己编写脚本,但我需要为此购买一些东西。哇,我认为这可能更容易,因为使用 htaccess 您可以限制每个 ip 的下载或输入密码或其他一些东西,但总是手动,所以我认为这可以是一种使用 php 自动执行此操作的方法,但似乎没有。我将把这篇文章留在这里只是为了其他想法,也许会出现对某人有用的东西。
猜你喜欢
  • 2012-08-25
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 2021-02-16
  • 1970-01-01
  • 2014-09-09
相关资源
最近更新 更多