【发布时间】:2009-12-16 15:16:49
【问题描述】:
我正在编写一个网络应用程序,允许用户在应用程序上上传他们的文件。用户单击“上传”按钮后,该文件将上传到 HTTP 服务器。用户可以通过从路径中获取文件来接收文件...... ...例如:http://www.demo.com/user/abc/download/the_file.jpg
但我发现所有人都可以使用该路径访问此文件。我该怎么办,或者有没有更好的方法来管理只有注册用户或文件所有者才能下载文件的文件?
【问题讨论】:
我正在编写一个网络应用程序,允许用户在应用程序上上传他们的文件。用户单击“上传”按钮后,该文件将上传到 HTTP 服务器。用户可以通过从路径中获取文件来接收文件...... ...例如:http://www.demo.com/user/abc/download/the_file.jpg
但我发现所有人都可以使用该路径访问此文件。我该怎么办,或者有没有更好的方法来管理只有注册用户或文件所有者才能下载文件的文件?
【问题讨论】:
由于性能问题,直接在脚本中提供文件不是一种选择,而且由于内存限制,实际上不可能提供 BIG 文件。
最好的选择是使用 Apache 模块 mod_xsendfile。这个想法是将所有请求重定向到 PHP/Perl/Python 脚本只会设置一个 HTTP 标头“Hey Apache,请改为提供此文件”,mod_xsendfile 会处理它。
如果没有此身份验证,客户端将永远无法下载文件。
【讨论】:
如果使用 apache httpd 之类的东西,您可以使用 .htaccess 文件,如果您希望用户继续访问文件系统上某个路径上的文件,则可以使用为用户或组提供的目录。
如果你锁定了目录并且有一个脚本来管理文件传递,你可以在脚本中检查权限并给用户请求的文件或 403。
我倾向于使用脚本方法,因为它可以让我更好地控制权限管理方式和更复杂的访问场景。
【讨论】: