C# 如何禁止通过直接url访问下载文件?

C# 如何禁止通过直接url访问下载文件?,c#,php,apache,C#,Php,Apache,我目前正在从事一个项目,该项目允许用户在更新可用时更新和修补其应用程序。我使用Apache作为web服务器,并将补丁文件放在webroot中。应用程序通过https下载补丁文件(我使用的是从unity assets stores购买的补丁系统。它支持http、https和ftp。它是用c#完成的)。为了更好的安全性,我禁用了目录列表,但是如果我指定了路径,我仍然可以通过浏览器下载特定的文件。例如: 我有没有办法限制用户直接通过url下载文件?有没有更好的方法可以提高安全性 谢谢。您只能允许特定

我目前正在从事一个项目,该项目允许用户在更新可用时更新和修补其应用程序。我使用Apache作为web服务器,并将补丁文件放在webroot中。应用程序通过https下载补丁文件(我使用的是从unity assets stores购买的补丁系统。它支持http、https和ftp。它是用c#完成的)。为了更好的安全性,我禁用了目录列表,但是如果我指定了路径,我仍然可以通过浏览器下载特定的文件。例如:

我有没有办法限制用户直接通过url下载文件?有没有更好的方法可以提高安全性


谢谢。

您只能允许特定IP:

<Location />
        Order Deny,Allow
        Deny from all
        Allow from 192.168.
</Location>

命令拒绝,允许
全盘否定
允许从192.168开始。
如果应用程序与浏览器安装在同一台pc上,那么您就倒霉了。你也许可以用用户代理做一些魔术,但这几乎是任何有邮递员的人都可以破解的


这就是为什么我们更喜欢将它们存储在数据库、文件服务器或blob存储中,这样我们也可以保护它们

在以下情况下防止文件下载:

  • 用户直接将URL复制并粘贴到浏览器中,然后按enter键
  • 用户单击直接链接 从其他网站

你可以考虑以下选项:

  • 您的更新客户端在更新之前设置自定义HTTP头或cookie 从服务器请求文件,然后服务器(PHP)检查它们是否存在 然后送达文件
  • 由于您使用的是ApacheWeb服务器,因此可以使用与上述选项相同的方法
示例
.htaccess

检查Cookie:

RewriteEngine on
RewriteCond %{HTTP_COOKIE} !YourMagicCookie=123456 [NC]
RewriteRule ^ - [F]
检查自定义HTTP标头:

RewriteEngine on
RewriteCond %{HTTP:X-YourUpdateClient} !^$
RewriteRule ^ - [F]

这回答了你的问题吗?将修补程序文件保存在web根目录之外。从
https://example.com/patch/test.txt
https://example.com/patch?filename=test.txt
。现在,在PHP文件中获取
filename
值,并通过读取webroot(public_html)之外的文件夹中的文件来下载相应的文件。您还可以通过身份验证只允许特定用户下载。嗨,Prakar,谢谢您的回复。该解决方案是否允许下载大量文件和目录?我不熟悉http头,但修补文件包括一堆文件和目录。如果你想下载文件而不允许直接访问,最好使用身份验证。嗨,谢谢你的回复。我曾想过使用文件服务器,但不幸的是,补丁系统似乎不支持ftps协议,只支持ftp协议。我正在询问补丁系统的创建者关于ftps支持的问题。