我正在构建一个webform应用程序,只有登录的用户才能看到某些页面。如何保护直接文件访问
这些页面包含多个文件的链接,但是一旦用户知道完整的url(例如:“http://mywebsite.com/files/readme.txt”),他们可以在任何时间任何地点访问它,而无需登录。
我使用我的自定义身份验证,我没有使用asp.net提供的安全性。
如何防止这样的问题,我使用asp.net C#4.5的网页表单应用程序,使用IIS 7
我正在构建一个webform应用程序,只有登录的用户才能看到某些页面。如何保护直接文件访问
这些页面包含多个文件的链接,但是一旦用户知道完整的url(例如:“http://mywebsite.com/files/readme.txt”),他们可以在任何时间任何地点访问它,而无需登录。
我使用我的自定义身份验证,我没有使用asp.net提供的安全性。
如何防止这样的问题,我使用asp.net C#4.5的网页表单应用程序,使用IIS 7
不提供直接链接到我的档案托管服务提供商。创建一个名为GetFile.aspx?id=1
的新页面,并让页面检索文件。这样用户永远不会知道或直接访问服务器上的文件。这样,您可以更改存在文件的文件夹的安全性,以便只有Web服务器才能直接访问它们。
更改您的链接页面上的是:
public void DownloadFile(string fileName)
{
Response.Clear();
Response.ContentType = @"application\octet-stream";
System.IO.FileInfo file = new System.IO.FileInfo(Server.MapPath(FileName));
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.Flush();
}
从这个问题采取
代码示例:Open any file from asp.net
如何下载从asp.net文件<a href="GetFile.aspx?id=1">Click here for read me file</a>
例
您是否使用任何提供ASP.Net(Windows,Forms,Passport)的身份验证方案?
如果是的话,你可以添加到您的Web.config文件中的“位置”一节中,你可以限制非登录用户的文件存储库访问,像这样(根据你的例子):
<configuration>
<location path="files">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
</configuration>
在这种情况下,如果用户知道完整的URL地址,因为这将不可用,如果是离线
...不要使用文件路径为'ID也没关系'。 –