【问题标题】:Error: A potentially dangerous Request.Path value was detected from the client (&)错误:从客户端检测到潜在危险的 Request.Path 值 (&)
【发布时间】:2018-05-02 20:00:44
【问题描述】:

尝试将 Uri 设置为 SSRS 2014 Report Server Uri 时出现此错误。这是发生错误的代码。

mReportViewer.ServerReport.ReportServerUrl = New System.Uri("http://MONROE:80/ReportServer_SQL2014")

这是在一个新的 ASP.NET 4.0 Web 应用程序上,我在发布前正在测试它。在此 Web 应用程序的当前生产版本(即 .NET 3.5)下,完全相同的代码可以正常执行。

我看不出这个 URL 有什么危险。我想知道是否可能是其他原因导致错误,但是,这似乎是有问题的代码行,因为如果我将其注释掉,页面会正常加载(尽管没有呈现报告)。

有什么想法吗??

---- 更新 - 2018 年 5 月 3 日

从报表服务器名称中删除 :80(不是真的需要)_ 解决了非法路径名的问题,但现在我遇到了另一个奇怪的错误。

真正奇怪的是,同样的 Web 应用程序和报表查看器在我使用 IIS Express 的开发机器上运行良好。此外,此报告 URL 在 ASP.NET 3.5 下的生产版本中运行良好。

关于什么路径或文件名的任何想法是这里的关注点,因为http://MONROE/ReportServer_SQL2014 的长度绝对不是 248 个字符!

这是 Application_BeginRequest 过程的代码...

   Sub Application_BeginRequest(ByVal Sender As Object, ByVal E As EventArgs)
    ' This solves a vulnerability issue
    ' Microsoft Knowledge Base (KB) article 887459, "Programmatically Checking for Canonicalization Issues with ASP.NET,"
    If (Request.Path.IndexOf(Chr(92)) >= 0 Or
      System.IO.Path.GetFullPath(Request.PhysicalPath) <> Request.PhysicalPath) Then

        Throw New HttpException(404, "Not Found")
    End If
    ' The following line must be restored when moving to production on a site with a secure certificate
    If ((Not HttpContext.Current.Request.IsSecureConnection) And (Not HttpContext.Current.Request.IsLocal)) Then
        Response.Redirect("https://" & Request.ServerVariables("HTTP_HOST") & HttpContext.Current.Request.RawUrl)
    End If

【问题讨论】:

  • 可能是它为我们设置的新项目https,因此它警告您因为http?
  • 错误是设置 URL时出现,还是调用时出现?
  • 可以添加Uri.EscapeDataString("http://MONROE:80/ReportServer_SQL2014")
  • 另外,我不能肯定上面列出的代码行是罪魁祸首,因为我相信我已经超越了这一点。我认为这个错误现在来自 SSRS 中的某个地方。

标签: asp.net


【解决方案1】:

我认为该问题是由于报表服务器 url 中的下划线 (_) 引起的。

您可以尝试在 web.config 中添加以下代码

<system.web>
    <httpRuntime requestPathInvalidCharacters="" requestValidationMode="2.0" />
    <pages validateRequest="false" />
</system.web>

【讨论】:

  • 好的,我试过了,错误消失了,但它被替换为“不支持给定路径的格式。”
  • 我想知道是不是 :80?在这种情况下,我可能不需要指定端口 80。
  • 我拔出了 :80 但我仍然收到错误消息。 MONROE/ReportServer_SQL2014 中的其他内容提示此错误。
  • 查看屏幕截图和异常堆栈跟踪,错误似乎源自 Application_BeginRequest 方法中 Global.asax.vb 文件中的第 145 行。能否设置断点并单步执行代码以进行故障排除。
  • 问题是这个错误发生在生产服务器上,所以我无法访问调试器。我的开发工作站上没有出现此错误。
猜你喜欢
  • 2012-04-06
  • 2017-10-07
  • 2011-08-06
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
相关资源
最近更新 更多