独特/即将过期的网址

时间:2016-01-30 00:27:37

标签: php html .htaccess

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

domain/file.mp4

对于能够下载该文件的用户,我想将其放在带有下载按钮和流媒体播放器的php页面中,这样就可以了:

域/下载?= file.mp4

在生成的php页面中,下载URL为:

domain/file.mp4? AccessKeyId=AXIXI 

因此,用户将无法共享链接。 我甚至不知道这是否可行,只是在这里询问一些想法。

1 个答案:

答案 0 :(得分:0)

使用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才能成功。

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