2010-11-04 48 views
0

我目前正在使用ASP.NET中的Web應用程序來顯示從SQL Server數據庫獲取數據的報表(使用SQL Sever BIDS創建)。代碼隱藏在C#中。我正在通過在報告參數中發送HTML注入來進行一些安全測試(只需使用幾個標籤即可),例如<i>text</i>)。我點擊「查看報告」之後,它攪動了大約半秒,然後引發以下錯誤:在ASP.NET報表查看器中的HTML注入

Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.

調用棧都是匿名的JavaScript函數。我沒有在這個項目中編寫一些底層代碼,所以我無法弄清楚如何在發現之前發現錯誤 - ,如果可能的話。

回答

0

通過添加正下方下面的JavaScript代碼(未內側)的ReportViewer標籤解決:

<script type="text/javascript"> 
     $("input").blur(function() { 
      ClientValidate(this); 
     }); 
    </script> 

其中ClientValidate()是經由正則表達式條HTML標籤的功能。

0

不確定你的代碼隱藏是什麼樣的。是否有可能攔截ReportViewer的PreRender事件並驗證報告參數?

private void CheckReportParameters(LocalReport localReport) 
    { 
     foreach (ReportParameterInfo parameter in localReport.GetParameters()) 
     { 
      string parameterValue; 
      foreach (string value in parameter.Values) 
      { 
       // Take out offending characters or encode them 
      } 
     } 
    } 
+0

這看起來很有希望。不幸的是,PreRender事件太晚了 - 錯誤在被調用之前被拋出。我也嘗試過OnLoad,這也已經太晚了,而OnInit,爲時尚早(報告尚未載入)。 – 2010-11-04 20:32:08