限制对文件的直接访问的当前可能方法是放置在App_Data文件夹中。但是,如果我使用app_data文件夹,它将阻止直接浏览器访问以及HTML渲染。我想允许App_Data中的文件以编程方式通过某种授权在客户端呈现即会话价值
现在,如果将文件上传到其他文件夹并以html格式呈现,则可以使用,但它也可以直接访问不需要的文件,在我的情况下,这是一个安全漏洞。
到目前为止我尝试过的 1.我已经实现了通过直接URL限制文件下载。使用FileResult方法。但是我仍然无法在客户端(Jquery)中呈现文件。
答案 0 :(得分:1)
我也遇到过同样的情况,经过搜索,我从这个答案中得出了这个解决方案。
https://stackoverflow.com/a/10604182/5934624
使用此答案,我只需要创建一个 IHTTPHANDLER ,以拦截所有发送到App_Data或要保护的文件夹的请求。
IHTTPHANDLER
public class PdfHandler : IHttpHandler
{
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
/*
Validate Requests here and then return your PDF File
*/
var requestFilePath = context.Requests.AppRelativeCurrentExecutionFilePath;
context.Response.ContentType = "application/pdf";
string filePath = HttpContext.Current.Server.MapPath(path);
context.Response.TransmitFile(filePath);
}
}
还可以在 Web.Config
中添加参考<system.webServer>
<handlers>
<add name="cplFiles" verb="*" path="*.pdf" type="YourProject.Models.PdfHandler , YourProject" resourceType="File" />
</handlers>
</system.webServer>
答案 1 :(得分:0)
一种方法是将文件作为字节[](或任何其他格式)返回,然后在客户端从此再见[]重建或重新创建文件
u还可以创建一个可供客户端访问的临时位置,将文件复制到该位置并从那里提供,在提供文件后删除该文件(当然,在性能方面,这不是最佳实践,但是它具有很好的安全性)明智的做法是,特定的网址将无法正常工作两次)