我正在开发网站有一些文件放在文件夹中,并为用户提供这些文件的链接,以便他们可以下载这些文件,我只是允许经过身份验证的用户,但不是所有用户都知道文件的链接直接把它放在地址栏中并获取该文件,任何人都可以告诉我,我怎么能确保只有经过身份验证的用户下载的文件不是所有用户。
答案 0 :(得分:3)
如果您将所有文件都放在一个文件夹中,那么您只需将web.config
个文件放在此文件夹中,其中包含以下内容:
<configuration>
<system.web>
<authorization>
//disallow anonymous users
<deny users="?"/>
</authorization>
</system.web>
</configuration>
您可以找到更多详情here。
答案 1 :(得分:3)
您不希望提供指向实际文件的链接。您最好的办法是将文件存储在非Web可访问的位置,或者设置文件夹的权限,以便只有您的应用程序才能访问它,而不是匿名用户。
您可以在数据库的user_files表中维护用户特定文件的列表,然后链接到将文件名定义为变量的下载脚本,并将用户文件作为八位字节流传递。
string _fileName;
string _path = /*some user specific path*/ + "FileDir/" + name;
System.IO.FileInfo _file = new System.IO.FileInfo(_path);
if (_file.Exists)
{
Response.Clear();
Response.AddHeader("Content-Disposition", "attachment; filename=" + _file.Name);
Response.AddHeader("Content-Length", _file.Length.ToString());
Response.ContentType = "application/octet-stream";
Response.WriteFile(_file.FullName);
Response.End();
}
答案 2 :(得分:2)
如果您正在使用asp.net角色和身份验证,那么您可以在Web配置中执行类似的操作...
<location path="Admin">
<system.web>
<authorization>
<allow roles="Administrator" />
<deny users="?" />
</authorization>
</system.web>
</location>
答案 3 :(得分:2)
你不应该显示文件的直接链接,你应该创建类似代理的东西(我认为http处理程序非常适合)。在处理程序中,你应该检查用户是否已经验证(可能从会话中检查一些值),如果是,则返回文件,否则返回未找到或其他内容。
所以所有文件的网址都是这样的:
http://localhost/filesHandler.ashx?file=pathToFile
答案 4 :(得分:2)
一个解决方案:不直接将链接放到您网站中的该文件中,并且不要将这些文件放在访问者猜测位置的位置。
而是使用像“download.aspx?file = filename”这样的链接。然后在该download.aspx中,您可以验证用户和Response.WriteFile该文件。
(Download.ashx也可以)
答案 5 :(得分:-1)
只是,您需要在文件下载Page_Load事件页面上检查登录用户是否为身份验证用户。如果是身份验证,则允许访问用户以下载文件。