Как я могу ограничить отражение для определенных сборок? - PullRequest
3 голосов
/ 09 апреля 2010

В моем приложении .net я хочу ограничить рефлексию определенными сборками. Я имею в виду, что я хочу, чтобы моя конкретная сборка могла отражаться только некоторыми предопределенными сборками, а не какой-либо другой. Как я могу это сделать?

Edit:

Этот инструмент полностью завершает разборку .NET и декомпиляцию сборки. Я хочу разрешить некоторым предопределенным сборкам отражать эту сборку, но ограничить другие, делающие это. Я хочу что-то, что должно быть объявлено с точки зрения сборки, например AssemblyOne дает разрешение AssemblyTwo, что вы можете отражать меня, так что только AssemblyTwo должна быть в состоянии отразить это с полным доверием, никто другой.

Ответы [ 4 ]

9 голосов
/ 09 апреля 2010

Инструмент, на который вы ссылаетесь, в основном компилирует все приложение в нативный код. Это на самом деле не «отключает» Reflection или что-то еще, это просто превращает приложение во что-то совершенно другое, это больше не байт-код и больше не технически сборка .NET.

Абоненты с полным доверием могут всегда использовать отражение в сборке .NET и во всем внутри нее. Помимо (а) запутывания, которое любой человек с достаточным терпением и решимостью может де-запутать, или (б) компиляции в нативный код, который предотвратит любой вид отражения (и многие другие полезные функции), вы Вы не можете предотвратить это, и вы, конечно, не можете ограничить это конкретными сборками.

ReflectionPermissionAttribute, в отличие от того, что говорит один из других ответов, не не позволяет вызывающим абонентам отражать на ваш код; скорее он контролирует доступ от к этому коду до API Reflection. Здесь это не поможет.

Почему так важно так или иначе скрывать свой код или структуру классов? Если вы не работаете в АНБ, большая часть кода просто не так важна / секретна, и большинство приложений легко перестроить при условии достаточного времени и ресурсов. На самом деле, злоумышленник или плагиат вряд ли выиграет от копирования кода из Reflector и / или использования Reflection для обнаружения вашего API.

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

5 голосов
/ 09 апреля 2010

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

http://www.pcreview.co.uk/forums/thread-2196297.php

4 голосов
/ 09 апреля 2010

Отражение неотразимо! : -)

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

2 голосов
/ 09 апреля 2010

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

Причина, по которой я спрашиваю: Я просто не верю, что все, что мы делаем в программном обеспечении, настолько уникально само по себе на уровне библиотеки кода, что требует, чтобы люди не смотрели на него - поэтому мне интересно если, возможно, вы идете по неверному пути. Поскольку вы не упоминаете, почему вы хотите заблокировать рефлексию, я не знаю, может быть, ваш сценарий имеет смысл (по крайней мере, из моего POV) ограничить доступ.

Я не могу представить себе реальный сценарий, в котором ограничение доступа действительно могло бы получить вас где угодно - это не блеск какого-то конкретного куска кода, который сегодня делает систему, а полный пакет (UX, обслуживание клиентов, быстрая эволюция в ногу с использованием и т. д.). Если ваш код хорош, он со временем изменится, поэтому любой, кто его взломает, будет на два шага позади вашей текущей итерации (по крайней мере). Ваша ценность - ваш мозг, а не сборка.

И если вы делаете это по соображениям безопасности, то вам действительно не следует пытаться «обезопасить» его, блокируя рефлексию.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...