簡體   English   中英

如何阻止第三方調用某些方法?

[英]How can I prevent a third party from calling certain methods?

我有一個正在開發的程序集,用於創建圍繞某些潛在敏感功能的外觀,我希望允許第三方調用其中包含的某些方法,而不是其他方法。

如果他們可以訪問整個DLL,我怎么能阻止第三方調用未經授權的方法(我不關心他們看到代碼,只是執行它)?

這必須與.net緊湊框架兼容,所以不幸的是使用StrongNameIdentityPermission屬性是不可能的。

我認為你應該發布兩個Facade實現,一個用於暴露所有方法的“內部”消費者,另一個暴露所有方法的外部消息。 您可以通過擁有兩個單獨的構建過程來實現此目的,同時只維護一個代碼庫。 我們想到的一種技術是使用編譯器指令從外部構建中排除方法,或者如果其他公共方法需要,則將其標記為內部方法。 如果您運送帶有內部修飾符的敏感方法,您可能還需要實現模糊處理。

編輯

也許它會更干凈,而不是圍繞每個方法使用部分類的指令,為敏感方法定義一個部分類,並將整個類實現放在一個指令中。

    public partial class MyClass
    {
        public void NonSensitive(){}
    }

    #if INTERNAL_BUILD
    public partial class MyClass
    {
        public void Sensitive(){}
    }
    #endif

您可以將此部分類放在相同或單獨的文件中,這可能是一個很好的分離級別,因為您可以預先添加文件名x_Sensitive.cs或類似文件。

描述

假設我理解你的問題。

您可以使用internal訪問修飾符標記方法,以使其無法從其他庫中訪問。

但是這對安全性來說無濟於事,因為始終可以使用反射來運行該方法。

internal關鍵字是類型和類型成員的訪問修飾符。 內部類型或成員只能在同一程序集中的文件中訪問

更多信息

如果第三方可以看到代碼,那么他們可以運行它 - 你沒有做任何事情來阻止它。

但是請注意,您有一個正在加載第三方插件的應用程序,然后您可以加載具有阻止其使用反射的限制的插件程序集 - 這意味着您可以將這些方法/類標記為internal以防止插件調用這些方法在應用程序中作為插件加載時 根據敏感功能的性質,從安全角度來看,這可能對您有用,也可能沒有用。

有關如何執行此操作的信息,請參見如何:在沙箱中運行部分受信任的代碼

您能否提供您希望第三方作為Web API使用的功能? 他們將無法訪問源代碼或已編譯的二進制文件。 他們只能看到你希望他們看到的確切內容。 這還將提供其他安全功能,例如呼叫者的身份驗證和授權。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM