ASP.Net MVC,JS注入和System.ArgumentException - 路径中的非法字符

时间:2010-04-30 17:03:09

标签: asp.net-mvc

在我的ASP.Net MVC应用程序中,我使用自定义错误处理。 我想为我在我的应用程序中遇到的每个错误案例执行自定义操作。

所以我覆盖 Application_Error ,获取 Server.GetLastError(); 并根据异常,当前用户,当前URL(应用程序在许多域上运行),用户IP以及许多其他人来开展业务。

很明显,该应用程序通常是黑客的目标。 在几乎所有情况下,检测和管理它都不是问题,但对于一些 JS URL攻击,我的错误处理不能执行我想要的操作。 Ex(来自日志):

http://localhost:1809/Scripts/]||!o.support.htmlSerialize&&[1

当我收到这样的网址时,访问 web.config 中的 ConnectionStrings 部分会引发异常,我甚至无法重定向到其他网址。

它会导致“ System.ArgumentException - 路径中的非法字符 等”

下面的屏幕截图显示了问题: http://screencast.com/t/Y2I1YWU4

一个明显的解决方案是编写一个 HTTP模块来在网址到达我的应用程序之前对其进行过滤,但我想避免使用它,因为:

  • 我喜欢在一个地方管理整个安全性(在 Application_Error()方法中)
  • 在模块中,我无法访问应用程序本身的全部数据(我不想在此讨论特定于应用程序的数据)

问题: 你遇到这个问题了吗? 你是怎么经营的?

谢谢你的建议,

摩西

PS:这是堆栈跟踪:

System.ArgumentException: Illegal characters in path.
at System.IO.Path.CheckInvalidPathChars(String path)
at System.IO.Path.Combine(String path1, String path2)
at System.Web.Configuration.UserMapPath.GetPhysicalPathForPath(String path, VirtualDirectoryMapping mapping)
at System.Web.Configuration.UserMapPath.GetPathConfigFilename(String siteID, VirtualPath path, String& directory, String& baseName)
at System.Web.Configuration.UserMapPath.MapPath(String siteID, String path)
at System.Web.Hosting.HostingEnvironment.MapPathActual(VirtualPath virtualPath, Boolean permitNull)
at System.Web.Hosting.HostingEnvironment.MapPathInternal(VirtualPath virtualPath, Boolean permitNull)
at System.Web.CachedPathData.GetPhysicalPath(VirtualPath virtualPath)
at System.Web.CachedPathData.GetConfigPathData(String configPath)
at System.Web.CachedPathData.GetVirtualPathData(VirtualPath virtualPath, Boolean permitPathsOutsideApp)
at System.Web.HttpContext.GetFilePathData()
at System.Web.HttpContext.GetConfigurationPathData()
at System.Web.Configuration.RuntimeConfig.GetConfig(HttpContext context)
at System.Web.HttpContext.get_ImpersonationToken()
at System.Web.ClientImpersonationContext.Start(HttpContext context, Boolean throwOnError)
at System.Web.HttpApplication.ThreadContext.Enter(Boolean setImpersonationContext)
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext)
at System.Web.HttpApplication.ApplicationStepManager.ResumeSteps(Exception error)

0 个答案:

没有答案