System.ArgumentException:路径中的非法字符。 CGI反序列化

时间:2018-11-16 18:00:43

标签: c# cgi iis-8 iis-10

我有一个IIS CGI C#应用程序,该应用程序的源代码丢失了,所以我将其反编译,重建并托管其新版本。
重建后,尝试使用设置反序列化JSON文件(使用System.Web.Extensions)时,应用程序崩溃。例外:

  

未处理的异常:System.Exception:System.ArgumentException:路径中的非法字符。
         在System.Security.Permissions.FileIOPermission.CheckIllegalCharacters(String [] str,布尔型仅CheckExtras)处
         在System.Security.Permissions.FileIOPermission.AddPathList(FileIOPermissionAccess访问权限,AccessControlActions控件,String [] pathListOrig,布尔值checkForDuplicates,布尔值needFullPath,布尔值copyPathList)
         在System.Security.Permissions.FileIOPermission..ctor(FileIOPermissionAccess访问,String [] pathList,布尔值checkForDuplicates,布尔值needFullPath)
         在System.AppDomainSetup.VerifyDir(String dir,布尔归一化)
         在System.AppDomainSetup.get_ConfigurationFile()
         在ibsnccgi.Options.ReadSettings()
         在ibsnccgi.Options.ReadSettings()
         在ibsnccgi.Program.Main(String [] args)

代码在如下行崩溃:

var serializer = new JavaScriptSerializer();
var bar = serializer.Deserialize<test>("{\"foo\":\"123\"}");

应用程序app.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
</configuration>

更新:

进一步研究问题将我引至本文: https://blogs.msdn.microsoft.com/david.wang/2005/07/13/iis-6-prefixing-paths-with/
问题是IIS CGI应用程序将在运行时带有一些安全保证,这将为应用程序在其运行时访问的路径添加前缀“ \\?\”。

例如:
Assembly.GetEntryAssembly()。CodeBase是'file://?/ C:/IIS/ibsnccgi/CGIExample/TestCGI.exe';
替换所有错误字符后,它将是'\\?\ C:\ IIS \ ibsnccgi \ CGIExample \ TestCGI.exe';
但是'\\?\'不是Windows路径的有效部分,因此会引发System.ArgumentException。

我的解决方案是参考旧项目迁移到ASP.NET应用程序。

0 个答案:

没有答案