У меня есть код С#. Он имеет некоторые параметры конфигурации, которые хранятся как автоматические свойства или частные поля. Теоретически человек, который его использует, может изменять частные переменные с помощью Reflection.
Есть ли способ отрицать это? Я могу использовать статические поля только для чтения, и тогда их нельзя изменить. Но саму ссылку на этот класс все равно можно заменить на другой с вредоносными настройками.
Я думал об анонимном методе и переменной в замыканиях. Но в этом случае ссылку на этого делегата все равно можно заменить.
Также я попытался указать SecurityCriticalAttribute для своих полей, поскольку у вызывающей стороны может не быть доступа FullTrust, но, похоже, он не проверяет доступ к полям. Только для самих методов\классов
ОБНОВЛЕНИЕ
Я исправил это таким образом:
- Инициализировать все переменные через конструктор
- Все переменные имеют определение только для чтения
Я добавил атрибут CAS в конструктор, поэтому никто без FullTrust не может его изменить.
[PermissionSetAttribute(SecurityAction.Demand, Unrestricted = true)]
Таким образом, чтобы обновить переменные, пользователю необходимо создать новый экземпляр этого класса. А затем проверка CAS проверит вызывающего абонента.
Мне не очень нравится этот подход, и если у вас есть лучший способ, я буду признателен.