2010-04-23 59 views
0

如何解決存儲在服務器上的文件的安全問題?我們有一個生成PDF的ASP.NET應用程序。這些不存儲在wwwroot文件夾中,而是存儲在另一個文件夾中,即C:\ inetpub \ data。這提供了更多的安全性,但可能還不夠。 ASP.NET/IIS進程需要對此文件夾的寫入權限,以便在那裏生成PDF。如何鎖定和保護存儲在ASP.NET服務器上的文件?

生成PDF後,可以使用名爲viewpdf.aspx的ASP.NET窗體查看,並將要查看的文件添加到查詢字符串中,例如viewpdf.aspx?FILE = mynewfile.pdf。這是從gridview加載的。

解析C:\ inetpub \ data的完整路徑並將其加載到查看器頁面的Page_load事件中。現在我想知道如何確保這一點。任何人都可以查看該文件。不要輸入URL,因爲它不會被IIS看到(它不在wwwroot中),但可以改變viewpdf頁面中的查詢字符串。

我該如何阻止任何黑客入侵?

+3

加密您的查詢字符串值: http://stackoverflow.com/questions/240713/how-can-i-encrypt-a-querystring-in-asp-net – LesterDove 2010-04-23 19:40:00

回答

2

首先,不要在查詢中使用的文件名串。使用其他標識符;最好是不可猜測的ID。一個例子是一個base 64編碼的guid。

其次,viewpdf.aspx文件應實現您的安全模型,以測試訪問該鏈接的用戶是否有權查看該文件。

第三,您可能會考慮將實際文件存儲在別的地方。 SQL 2008有一個FILESTREAM數據類型,可以將實際的文件數據推送到文件系統文件夾,看起來工作得很好。

1

您使用某種形式的身份驗證(如表單身份驗證)鎖定viewpdf.aspx,否則任何訪問querystring(加密或不加密)的人都將能夠查看該文件。您是否有安全模型來確定誰有權訪問該文件?

+0

是,我們有我們自己的安全機制,它會檢查頁面加載事件。 – jaffa 2010-04-25 00:01:51

1

我用做的是,我道歉,因爲我沒有母語:

  • 當保存PDF,將其重命名爲GUID,如姓名(使用的System.Guid)
  • 創建一個表與生成的名稱並保留原來的名字,以備後用。
  • 服務在PDF的製作與Server.Transfer重定向到您的aspx頁面另一個頁面,並通過記錄的標識讓您的搜索,沒有名字