2011-11-25 100 views
1

从编写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 theImplementation名称,然后加载它的执行它:

3)

Assembly assembly = Assembly.LoadFrom(assemblyName); 
     // assuming assembly is deployed by user into folder where application resides 
    Exit theExitImplementation = assembly.CreateInstance(theImplementation) as Exit; 

    int k = theExitImplementation.exitMethod("whatever"); 

(第一个问题,这个技巧有一个不属于ABAP世界的名称,它叫做什么?:-))

我想知道的是让你的应用程序执行这个操作所带来的风险用户代码(原谅我以防万一这是一个天真的问题,我仍然是新来的.Net)。假设输出只是一些消息代码,以确定某些日志输出的消息。

假设作为部署场景的一些公司使用该应用程序进行业务,该公司的一些员工编写退出实施。如果该员工想要造成损害,将会面临什么风险:

  1. 只是在日志中有错误的信息?
  2. 应用程序的类实例的内容?
  3. 应用程序正在运行的PC资源?
  4. 更糟?

这是我的印象,答案是4.不是吗? myClass获得执行的oppurtunity,因此可以基本上做任何应用程序可以执行的操作,这些操作由运行原始应用程序的用户启动。是否有防止这种情况的手段?

如果是这样:是否有任何区别(如果是这样,哪个),出口的签名是固定的,并且该方法的输入不能在该方法中更改? 此方法意图不允许动态定义类型。

这种方法,也是意图,只允许输入不能改变。 假设字符串参数被调用者可以修改的其他类型替换,如StringBuilder。这是否增加了风险?

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

+0

什么是ABAP ???? – renatoargh

+1

Hrmmm。 ABAP是SAP世界的编程语言。 – Thomas

+0

甚至有一个ABAP标签:-) – Thomas

回答

1

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

您应尽可能多地撤销SecurityPermissions以最小化通过调用来自GAC /可信代码的不可信代码而暴露的攻击面。看看this tutorial以了解.NET Security的工作原理。以下应照顾任何破坏性行为的外部代码可能会导致:

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

谢谢,这将给我一个进一步调查的起点! – Thomas

相关问题