生成文件,然后启动安全下载

时间:2009-04-07 13:13:26

标签: asp.net security excel download

在asp.net 2.0(VB)环境中工作,我已经有了可以从数据库为网站的特定“用户”生成excel文件的代码。我希望能够按需启动此报告生成器,然后在生成文件后,允许用户下载此文件。

如何安全地执行此操作,而不仅仅是将文件转储到某个可公开读取的目录中?

注意:与this question相关,但我真正感兴趣的部分从未得到过回答。

3 个答案:

答案 0 :(得分:4)

您可以创建一个允许您进行授权的HTTP处理程序,而不是将其放在公共目录中。

您可以通过在web.config中编译和注册或通过创建ashx页面来创建处理程序。然后您的页面将授权用户,然后将内容写入响应。

如果您需要会话状态,请务必从IRequiresSessionState继承。

修改

我是C#家伙,所以这里有一个示例:

public class DownloadFile : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{

    public void ProcessRequest (HttpContext context) {
    //Validate user is authenticiated and authorized.
    if (context.Request.IsAuthenticated)
    {
         //This is your own custom authorization mechanism
         if (AuthorizeUser(context.Request.User))
         {
            //not sure what the correct content type is. This is probally wrong
            context.Response.ContentType = "application/xls";
            //Setting size is optional               
            context.Response.AddHeader("Content-Disposition",
               "attachment; filename=" + downloadName + "; size=" +               myExcellFile.Length.ToString());
            context.Response.BinaryWrite(myExcellFile);


         }

    }

答案 1 :(得分:3)

使用Http处理程序(* .ashx文件)。移动代码以生成处理程序的文件,在生成文件之前检查的安全性,设置appropriate content-type and content-disposition headers,并使用Response.BinaryWrite将文件直接发送到浏览器。切勿将其放在服务器的文件系统上。

答案 2 :(得分:0)

你能......?

  1. 在私人(用户无法访问)文件夹中创建您的Excel文件
  2. 向用户返回与excel电子表格关联的唯一网址(不容易猜到的)
  3. 在您的应用中处理该网址请求并将Excel电子表格流式传输给调用者(相应地更改响应的内容类型)
  4. 这样可以让这些网址超时,甚至可以在需要时动态重新生成Excel电子表格。