Обеспечение блока так, чтобы это не могло использоваться третьим лицом

instanceof является оператором Javascript. Правый операнд должен быть значением времени выполнения (функцией или конструктором), чтобы он работал.

express.Application определяется как интерфейс. Интерфейсы существуют только во время компиляции, чтобы помочь в проверке типов. Это означает, что во время выполнения нет значения express.Application, которое будет операндом в операции instanceof, и поэтому машинопись выдает ошибку.

5
задан Tom 26 September 2008 в 12:17
поделиться

6 ответов

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

На каждых из Ваших точек входа можно назвать блок. GetCallingAssembly () и сравнивают результат со списком блоков, которым позволяют звонить в Вашу библиотеку и выдать исключение иначе.

Вы могли использовать инструмент как ilmerge, чтобы объединить Ваши блоки в Ваше главное приложение и отметить все внутренности как частные. Объединение с obfuscator для создания результатов немного лучше защищенными.

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

12
ответ дан 18 December 2019 в 08:32
поделиться

Необходимо добавить StrongNameIdentityPermissionAttributeattributes для требования безопасности

например,

[assembly:StrongNameIdentityPermissionAttribute(SecurityAction.RequestMinimum, 
 PublicKey="00240000048000009400000006020000002400005253413100040000010001005" +
 "38a4a19382e9429cf516dcf1399facdccca092a06442efaf9ecaca33457be26ee0073c6bde5" +
 "1fe0873666a62459581669b510ae1e84bef6bcb1aff7957237279d8b7e0e25b71ad39df3684" +
 "5b7db60382c8eb73f289823578d33c09e48d0d2f90ed4541e1438008142ef714bfe604c41a4" +
 "957a4f6e6ab36b9715ec57625904c6")]

посмотрите эту страницу MSDN для большего количества информации

или сделайте это в коде видит этот пример

3
ответ дан 18 December 2019 в 08:32
поделиться

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

2
ответ дан 18 December 2019 в 08:32
поделиться

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

Возможно, StrongNameIdentityPermission - то, что Вы ищете.

1
ответ дан 18 December 2019 в 08:32
поделиться

Не уверенный, если это - наилучший вариант, но Вы могли бы сделать все "общедоступные" классы в своем блоке внутренними, и затем использовать атрибут уровня ассемблера [InternalsVisibleTo] для явного определения других блоков со знаком.

[assembly: InternalsVisibleTo('MyAssembly,Version=1.0.0.1, Culture=neutral,PublicKeyToken=...");

Вот документы MSDN об атрибуте.

1
ответ дан 18 December 2019 в 08:32
поделиться

Звуки мне как невозможная проблема. Вы не можете доверять своей среде. Это - фундаментальный вычислительный принцип и причина для общественности/шифрования с закрытым ключом.

0
ответ дан 18 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: