如何限制仅通过我的网络应用程序通过浏览器下载文件系统
我需要最好的方法来阻止对不是我的 Web 应用程序的文档文件的任何访问,例如,我需要对搜索引擎或公共用户隐藏一些文件,只有私人用户可以访问和下载它们。
我想将文件保存在文件系统中而不是数据库中,以免增加数据库使用量。
I need the best way to prevent any access to doc files when it is not my web application, for example, I need some files to be hidden from search engines or public users and only private users may reach and download them.
I would like to save the files in the file system and not in the DB in order not to increase the DB usage.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以将文件存储在文件系统中无法通过 URL 访问的目录(例如根 Web 目录的同级目录)中。这将阻止直接访问。
然后,编写一个 PHP 脚本,当查询给定文件时,该脚本将检查用户是否可以访问该文件,并使用
readfile
发送该文件(连同header
一起发送)内容类型和内容配置)。You can store your files in the file system, in a directory that cannot be accessed through an URL (such as a sibling of your root web directory). This will prevent direct access.
Then, write a PHP script which, when queried for a given file, will check whether the user can access that file, and send it with
readfile
(along withheader
for the content type and content disposition).当您仅说“私人用户”时,我假设这意味着这些用户已通过某种方式进行了身份验证。您可以将这些文件存储在 Web 目录之外,然后通过 PHP/Perl/Your_Favorite_Programming_language 提供它们。
链接可能会指向一个脚本,该脚本检查该用户是否经过身份验证,如果是,则通过该脚本提供文件。
在 php 中,在验证用户身份后,您可以使用:
只需记住将该目录放在您的 webroot 之外,并将权限设置为与您的脚本运行相同的用户(nobody,通常在 apache 下)。
When you say "private users" only I'm assuming that means these users are authenticated somehow. You could store these files outside the web directory, and then serve them up via PHP/Perl/Your_Favorite_Programming_language.
A link could lead to a script that checks if that user is authenticated, if so, serve the file up via the script.
In php, after authenticating the user, you could use:
Just remember to make that directory outside your webroot, and to set the permissions to the same user that your scripts run as (nobody, generally under apache).
Robots.txt 是一种阻止/允许某些 HTTP 用户代理的方法。但这不是最安全的方式。您可以使用基本身份验证来让您的网络应用程序登录。
Robots.txt is a way to block/allow certain HTTP user agents. It's not the most secure way though. You could use basic authentication to let your web app login.