如何在不暴露物理路径的情况下在线提供可下载文件?

Cor*_*use 7 php c# asp-classic

我正在提供要求用户在下载前注册的文档.目前,一旦注册并登录,文档的链接显示为:

myurl.com/docs/mypdf.pdf
Run Code Online (Sandbox Code Playgroud)

因此,文档的物理路径会向登录的任何人公开.保持文档的物理路径隐藏的最佳做法是什么,以便注册用户无法与未注册用户共享直接链接或在其他地方发布直接链接到文档?

编辑:我只是在寻找与语言无关的想法,所以我选择了一些我最喜欢的语言作为标签.这种情况下的实际实现是ASP经典.我目前正在使用下载包装器脚本,该脚本确认用户在重定向到实际文档URL之前已登录.为简单起见,我只是没有把它包含在我的问题中.

Rik*_*ood 11

不要那样做.而是将文件保存在文档树之外的某个位置,然后使用脚本(例如,php,.Net,等等)使它们可访问

该脚本可以检查它们是否已登录,验证是否允许该文件,如果是,则返回该文件.他们去的路径看起来可能更像...... /download.php?file=mypdf.pdf

有点......

<?php
if (IsUserLoggedIn())
    readfile('/secret/path/to/file/mypdf.pdf');
?>
Run Code Online (Sandbox Code Playgroud)


j0t*_*0tt 8

最好的方法是从非Web可访问路径读取文件并将其写入输出流.

这似乎在你似乎使用的php中显示了一个好的例子?只需在php的顶部添加安全检查,如果未经授权,请将其删除.

http://www.higherpass.com/php/Tutorials/File-Download-Security/

  • 使用Web服务器透明地将http://myurl.com/docs/mypdf.pdf转换为http://myurl.com/docshandler.php?file=mypdf.pdf并且docshandler处理身份验证可能是个好主意.在发送文件或显示错误消息之前. (3认同)