我目前正在使用ASP.NET中的Web应用程序,该应用程序显示从SQL Server数据库中获取数据的报表(使用SQL Sever BIDS创建)。代码隐藏在C#中。我正在通过在报告参数中发送HTML注入来进行一些安全性测试(只有几个标记会执行此操作,例如<i>text</i>
)。点击“查看报告”后,它会搅拌大约半秒钟,然后抛出以下错误:
Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.
调用堆栈是所有匿名Javascript函数。我没有在这个项目中编写一些底层代码,所以我无法弄清楚如何在之前发现错误 - 它被发送到服务器,如果可能的话。
答案 0 :(得分: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
}
}
}
答案 1 :(得分:0)
通过直接在ReportViewer标记下方(而非内部)添加以下Javascript代码来解决:
<script type="text/javascript">
$("input").blur(function () {
ClientValidate(this);
});
</script>
其中ClientValidate()
是一个通过正则表达式去除HTML标记的函数。