Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 允许执行外部接口实现:风险是什么?_.net_Interface_Dynamic Linking_Assembly.load - Fatal编程技术网

.net 允许执行外部接口实现:风险是什么?

.net 允许执行外部接口实现:风险是什么?,.net,interface,dynamic-linking,assembly.load,.net,Interface,Dynamic Linking,Assembly.load,在编写ABAP程序时,我将以下方法称为程序的“出口”,因此我选择相应的名称 假设您在.Net中 1) 定义接口 namespace Exits { public interface Exit { int exitMethod(string s); // signature serves as example only } } 2) 为应用程序的用户提供某种方式来传递用户的名称 程序集ExitImplementation.dll和类的名称,例如myClass:exi

在编写ABAP程序时,我将以下方法称为程序的“出口”,因此我选择相应的名称

假设您在.Net中

1) 定义接口

namespace Exits {
    public interface Exit {
       int exitMethod(string s); // signature serves as example only
    }
}
2) 为应用程序的用户提供某种方式来传递用户的名称 程序集
ExitImplementation.dll
和类的名称,例如
myClass:exit
,实现应用程序的接口出口。例如,作为命令行参数或以某种形式

将用户程序集的名称存储在
string assemblyName
中,将类(包括命名空间)的名称存储在
string实现中,然后加载并执行它:

(三)

(第一个问题,不太重要:这种技术在ABAP世界之外有名字吗?它叫什么?:-)

我想知道的是,让您的应用程序执行此用户代码会带来哪些风险(请原谅,这是一个幼稚的问题,我对.Net还是新手)。假设输出只是确定某个日志的某个消息输出所需的一些消息代码

假设在部署场景中,某公司使用应用程序开展业务,该公司的某名员工编写退出实现。如果该员工想要造成损害,那么会有什么风险:

  • 日志中只有一条错误消息
  • 应用程序的类实例的内容
  • 运行应用程序的PC的资源
  • 更糟
  • 我的印象是答案是4。不是吗?myClass获得了执行的机会,因此基本上可以做任何由运行原始应用程序的用户启动的应用程序可以做的事情。有没有办法防止这种情况

    如果是:退出的签名是固定的,并且方法的输入不能在方法中更改,这是否有任何区别(如果是,会有什么区别)? 此方法不允许动态定义类型

    这种方法也是有意的,只允许输入不能更改的内容。 假设字符串参数被调用方可以修改的其他类型替换,如StringBuilder。这会增加风险吗

    是否有更复杂(标准)的技术来降低这种方法的风险?有其他方法吗?

    调用方法签名(通常)并不重要,只要您在没有任何安全预防措施的情况下调用外部的、不受信任的方法

    您应该撤销尽可能多的
    SecurityPermissions
    ,以最小化通过从GAC/可信代码调用不可信代码而暴露的攻击面。请看一看,大致了解.NET安全性是如何工作的。以下应注意外部代码可能导致的任何破坏性行为:

    NamedPermissionSet ps = new NamedPermissionSet("Nothing");
    ps.Deny();
    CallYourUnsafeMethodHere();
    CodeAccessPermission.RevertAll();
    
    只要您在没有任何安全预防措施的情况下调用外部的、不受信任的方法,被调用的方法签名(通常)就无关紧要

    您应该撤销尽可能多的
    SecurityPermissions
    ,以最小化通过从GAC/可信代码调用不可信代码而暴露的攻击面。请看一看,大致了解.NET安全性是如何工作的。以下应注意外部代码可能导致的任何破坏性行为:

    NamedPermissionSet ps = new NamedPermissionSet("Nothing");
    ps.Deny();
    CallYourUnsafeMethodHere();
    CodeAccessPermission.RevertAll();
    

    嗯。ABAP是SAP世界的编程语言。甚至还有一个ABAP标记:-)Hrmmm。ABAP是SAP世界的编程语言。甚至还有一个ABAP的标记:-)谢谢,这将为我进一步的研究提供一个起点!谢谢,这将给我一个进一步调查的起点!