如何進行web報表的用戶身份驗證,提高數據安全性
每次我們生成Web報表時,ajax請求都會導致處理程序的執行:WebResource.axd和FastReport.Export.axd。在ASP.Net應用程序中使用帶有axd擴展名的文件從dll庫獲取資源:圖像、javascript和樣式。
結果,我們得到一個HTML報表文件。但是,由于已生成報表并將其放置在IIS緩存中,因此,知道生成的報表ID(根據請求生成)后, 不法分子就可以輕松獲取它。如果報表包含機密數據,則這是一個潛在的安全問題。解決這種情況的方法可以是用戶身份驗證。也就是說,如果報表是由特定用戶調用的,那么只有他才能獲得該報表的副本。
我們可以檢查http請求以進行用戶身份驗證,但這不是出路。惡意因素也總是可以欺騙請求。最好的解決方案是會話身份驗證。直到最近,FastReport.Net才提供這種功能。但是在版本2019.3.13中,出現了一個事件,用于通過WebReport中的asp處理程序加載的報表資源的ajax身份驗證。
在顯示報表之前,將執行WebReport.CustomAuth事件。此時,您可以檢查會話中的用戶。這是使用新事件的示例:
public ActionResult Index() { Session["User"] = "Father Brown"; ... webReport.CustomAuth += WebReport_CustomAuth; ... } ... private void WebReport_CustomAuth(object sender, CustomAuthEventArgs e) { e.AuthPassed = (e.Context.Session["User"] as string) == "Father Brown"; } ...
如您所見,首先,在創建報表之前,我們在Http會話中設置用戶名,然后訂閱該事件。在事件處理程序中,我們執行用戶檢查。如果其他用戶請求該報表,則其在會話中的名稱將不同,并且該報表將不會顯示。此示例顯示了用戶身份驗證,但是您可以修改實現到您自己的版本。
因此,我們可以通過執行報表身份驗證來顯著提高數據安全性。