2011-11-25 81 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

相關問題