当前位置: 首页 > 编程语言 > C#

有人可以提供(链接)有用的InheritanceDemand示例吗?分享

时间:2023-04-11 11:06:31 C#

有人可以提供(链接)一个有用的InheritanceDemand示例吗?我有以下课程:[UIPermission(SecurityAction.InheritanceDemand,Window=UIPermissionWindow.AllWindows)]publicclassPrintData{protectedstringData="secretvalue";publicvirtualvoidPrintString(){Console.WriteLine(Data);有人可以提供一个示例,其中继承PrintData和/或调用重写的PrintString方法会引发异常吗?嗯,好不容易让程序炸了,这也是继承请求失败的直接原因。你需要一个包含三个项目的VS解决方案。首先是基础类:usingSystem;使用System.IO;使用系统安全;使用System.Security.Permissions;namespaceBaseClass{publicabstractclassIniPrinterBase{[FileIOPermission(SecurityAction.Deny,AllFiles=FileIOPermissionAccess.Read)]//[RegistryPermission(SecurityAction.InheritanceDemand,Unrestricted=true)]publicvirtualvoidPrintIniFile(){ProtectedPrint();}protectedvoidProtectedPrint(){try{varlines=File.ReadAllLines(@"G:test.ini");foreach(varlineinlines){Console.WriteLine(line);}}catch(SecurityExceptione){Console.WriteLine("打印INI文件失败!");Console.WriteLine(e.Message);}}}}然后是不同项目中的派生类:usingSystem.Security.Permissions;使用基类;[程序集:RegistryPermission(SecurityAction.RequestRefuse,Unrestricted=true)]namespaceDerivedClasses{publicclassFileIOPermissionExceptionThrower:IniPrinterBase{publicoverridevoidPrintIniFile(){base.PrintIniFile();}}公共类继承eDemandExceptionThrower:IniPrinterBase{publicoverridevoidPrintIniFile(){ProtectedPrint();}}}最后是第三个项目的主程序:usingSystem;使用派生类;namespaceMethodSecuritySpike{classProgram{staticvoidMain(string[]args){Console.WriteLine("从安全强制方法打印ini文件:");varprinter1=newFileIOPermissionExceptionThrower();打印机1.PrintIniFile();控制台.WriteLine();Console.WriteLine("绕过安全:");varprinter2=newInheritanceDemandExceptionThrower();打印机2.PrintIniFile();控制台.ReadLine();}}}为了使示例正常工作,您必须在DerivedClasses程序集中引用BaseClass程序集,在MethodSecuritySpike程序集中引用BaseClass和DerivedClasses程序集此外,在C的根以外的任何位置创建合适的test.ini文件:(否则Windows安全性可能会玩弄你)运行程序(MethodSecuritySpike.exe)。您首先会看到在尝试读取ini文件时捕获到异常,然后仍然显示ini文件的内容。接下来删除BaseClass命名空间中RegistryPermissionAttribute之前的注释斜线。运行程序:它拒绝运行!属性说明:基类中:[FileIOPermission(SecurityAction.Deny,AllFiles=FileIOPermissionAccess.Read)]在基类中调用PrintIniFile会引发异常(模拟代码访问安全试图阻止对ini文件的访问)InheritanceDemandExceptionThrower类通过重编写PrintIniFile方法,直接调用ProtectedPrint方法,绕过这个安全声明。SimulatingSecurityVulnerabilities)[RegistryPermission(SecurityAction.InheritanceDemand,Unrestricted=true)]要求从IniPrinterBase继承的类有上述权限(随意选择,因为它需要高信任级别)由于DerivedClasses.dll被明确拒绝这个权限,当取消注释这个属性,程序无法运行。在DerivedClasses中:[assembly:RegistryPermission(SecurityAction.RequestRefuse,Unrestricted=true)]指定应拒绝对RegistryAccess的请求(模拟部分信任环境)。通常,这不会引发异常,因为DerivedClasses.dll中的类不访问注册表。但是,当inheritanceCmand.dll处于活动状态时,DerivedClasses.dll需要注册表权限才能实例化它的两个类并将它们炸毁。简单的!?以上是C#学习教程:有人可以提供(链接)一个有用的InheritanceDemand例子吗?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: