Скрытие частного поля от отражения в .net

У меня есть класс, который выполняет некоторые важные операции ввода-вывода на всем томе диска. Под чувствительностью я подразумеваю, что если операция пойдет не так, это может потенциально повредить целевой том.

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

Есть ли способ защитить частные члены, чтобы предотвратить изменение через отражение (из производного или потребительского кода)?

ОБНОВЛЕНИЕ: я нашел комментарий от Ханса Пассанта к старый вопрос с упоминанием [ReflectionPermission]. Изучая это сейчас.


person Raheel Khan    schedule 10.03.2014    source источник
comment
Вы не можете помешать кому-то использовать отражение.   -  person Arran    schedule 10.03.2014
comment
@Arran: Конечно, нет. Мой вопрос заключается в том, предоставляет ли CLR механизмы безопасности для предотвращения доступа к отмеченным частным членам.   -  person Raheel Khan    schedule 10.03.2014
comment
Ответ по-прежнему нет!   -  person Arran    schedule 10.03.2014
comment
Если ваши клиенты хотят повредить свои тома, у них есть более простой способ сделать это, чем взломать ваше программное обеспечение.   -  person Anton Tykhyy    schedule 10.03.2014


Ответы (4)


Невозможно скрыть ваше поле от Reflection. Его можно использовать для доступа и управления любым полем типа. Есть шаги, которые вы можете предпринять, такие как обфускация, которые затрудняют идентификацию полей и, в свою очередь, затрудняют изменение с помощью Reflection. Но это всего лишь лежачий полицейский. Решительный разработчик может использовать Reflection, чтобы превзойти любую имеющуюся у вас работу.

person JaredPar    schedule 10.03.2014

Краткий ответ: Нет.

Вы не можете помешать людям вмешиваться в вашу программу, если у них есть привилегии.

person nvoigt    schedule 10.03.2014

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

Есть этот пост, который может дать вам некоторое представление о том, как вы хотите действовать. .

person IAbstract    schedule 10.03.2014

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

person Habib    schedule 10.03.2014