Как я могу запретить третьей стороне вызывать определенные методы? - PullRequest
7 голосов
/ 15 февраля 2012

У меня есть сборка, которая разрабатывается для создания фасада вокруг некоторой потенциально чувствительной функциональности, и я хочу позволить третьей стороне вызывать некоторые методы, содержащиеся в ней, но не другие.

Как я могупредотвратить сторонние вызовы неавторизованных методов, если они будут иметь доступ ко всей DLL (меня не беспокоит то, что они видят код, просто выполняют его)?

Это должно быть совместимо с .net compact framework.поэтому, к сожалению, использование атрибута StrongNameIdentityPermission невозможно.

Ответы [ 4 ]

3 голосов
/ 15 февраля 2012

Я думаю, вам следует отправить две реализации Facade, одну для «внутренних» потребителей, которая раскрывает все методы, и другую, которая предоставляет только подмножество. Вы можете достичь этого, поддерживая только одну кодовую базу, имея два отдельных процесса сборки. На ум приходит одна техника - использовать директивы компилятора , чтобы исключить метод из внешней сборки, или пометить его как внутренний, если этого требуют другие открытые методы. Если вы отправляете чувствительные методы с внутренними модификаторами, вы также можете захотеть реализовать обфускацию.

РЕДАКТИРОВАТЬ

Возможно, было бы чище, вместо того чтобы иметь директивы вокруг каждого метода для использования частичных классов, определять частичный класс для чувствительных методов и помещать реализацию всего класса в директиву.

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

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

Вы можете иметь этот частичный класс в том же или в отдельном файле, что может быть хорошим уровнем разделения, поскольку вы можете добавить имя файла x_Sensitive.cs или подобное.

2 голосов
/ 15 февраля 2012

Описание

Если я понимаю ваш вопрос.

Вы можете пометить свои методы с помощью модификатора доступа internal, чтобы сделать их недоступными из других библиотек.

Но это не помогает с точки зрения безопасности, потому что всегда можно запустить метод с использованием отражения.

Внутреннее ключевое слово является модификатором доступа для типов и членов типов.Внутренние типы или элементы доступны только внутри файлов в одной сборке

Дополнительная информация

0 голосов
/ 16 февраля 2012

Не могли бы вы предложить функциональность, которую третья сторона должна использовать в качестве веб-API? Они не будут иметь никакого доступа к исходному коду или скомпилированным двоичным файлам. Они смогут видеть только то, что вы хотите, чтобы они увидели. Это также обеспечит дополнительные функции безопасности, такие как аутентификация и авторизация вызывающих абонентов.

0 голосов
/ 15 февраля 2012

Если сторонний пользователь может увидеть код, он может запустить его - вы ничего не можете сделать, чтобы остановить это.

Обратите внимание, однако, что у вас есть приложение, которое загружает сторонние плагины, вы можете загрузить плагинсборки с ограничениями, которые не позволяют использовать рефлексию - это может означать, что вы можете пометить эти методы / классы как internal, чтобы плагины не могли вызывать эти методы при загрузке в качестве плагина в вашем приложении .В зависимости от характера чувствительной функциональности это может или не может быть полезно для вас с точки зрения безопасности.

Для получения информации о том, как это сделать, см. Как: выполнить частично доверенный код в песочнице

...