ASP.NET报表查看器中的HTML注入

时间:2010-11-04 18:53:23

标签: asp.net reporting-services

我目前正在使用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函数。我没有在这个项目中编写一些底层代码,所以我无法弄清楚如何在之前发现错误 - 它被发送到服务器,如果可能的话。

2 个答案:

答案 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标记的函数。