【问题标题】:How to protect files from direct download?如何保护文件不被直接下载?
【发布时间】:2013-01-05 16:17:04
【问题描述】:

我想保护我服务器中的一些文件不被下载,但我的网站需要访问它们。我想保护一些需要站点访问的字幕文件,但我不希望任何人下载它们。该网站是托管的。

例如,一些网站使用一些与用户、视频和 IP 相关的奇怪字符串。可以在我的情况下使用类似的东西。

http://www11.some-site.com:182/d/qygiatnqvsulzrqmk7n6nbhddbcscvyguy4auc3fn4nvf23jp64tjcpa/File-needed.mp4?start=0

【问题讨论】:

  • 将它们放在不在网站路径上但运行服务器的帐户可以访问的本地目录中。
  • 该网站是托管的,我认为我做不到。
  • 啊。应该在问题中提及的小细节 - 例如什么服务器以及您如何管理它。
  • 谢谢 ZombieSpy。我找到了我需要的东西。我刚刚在目录中创建了一个带有“deny from all”(不带引号)的 .htaccess 文件。

标签: file download


【解决方案1】:

如果您使用的是 Apache,则必须在您的 .htaccess 文件中使用重写规则。如果您使用的是其他 HTTP 服务器品牌,您应该使用与我将在此处展示的几乎相同的逻辑,因此在这种情况下请查看您的 HTTP 服务器手册。

说明:

当您键入 www.me.com/index.php 时,PHP 系统会将您使用的 echo 命令生成的内容放入您的代码中。

当您键入 www.me.com/myfiles/iou345yo13i2u4ybo34ybu3/passwords.txt 时,您的服务器会将文件内容放入客户端浏览器,客户端浏览器会要求您将其作为文件下载或显示为页面,具体取决于文件扩展名。

现在,如果您在 .htaccess 文件中执行以下操作:

 RewriteEngine On
 RewriteRule ^myfiles/([^/]*)^.pdf$ /index.php?file=$1& [L]
 # avoit direct access to your server directories file listing
 Options All -Indexes

您将键入 www.me.com/myfiles/file123.pdf,但服务器将执行 index.php 并将文件名作为“file”参数的内容,并且在代码中,您将能够检查会话以查看用户是否有权下载此文件。

如果用户有权限,然后你使用 readfile() 函数将文件发送给用户,他将无法识别它来自哪里(我的意思是真实路径)。

在此处查看如何执行此操作:

PHP - send file to user

【讨论】:

    【解决方案2】:

    在您的内容中更改为 644 权限。

    【讨论】:

    • 644 允许用户阅读和下载内容。即使是 640 也不会阻止用户访问它们。
    • 但是如果你低于 644 用户甚至看不到它们。这只是为了保护而不是使其不可用。
    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    • 2014-06-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多