Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Правильно ли?
|
|||
|---|---|---|---|
|
#18+
Задача такая: Реализовать некоторый механизм запрещающий создавать экземпляры класса одной сборки другими сборками не имеющими специальных атрибутов, а также попробовать обеспечить невозможность создания этих атрибутов посторонними лицами. Идея решения: Создать пару ключей rsa. Затем приватной частью ключа подписывать сборку с помощью специального приложения не включенного в дистрибутив, а паблик частью проверять подпись в конструкторе зашищаемого класса. Ход работ: 1. Итак генерим пару ключей и сохраняем в два файла public и private части. Код: plaintext 1. 2. 3. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 3. Делаем консольное приложение которым будем генерить подпись сборки (для примера на основании полного имени сборки), для удобства генерить будем в виде удобном для копирования в конструктор атрибута т.е. new byte[] {1,2...} Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 4. Пишем базовый класс для защищаемых классов (все они будут его потомками с единственной функцией проверяющей подписано ли приложение вызывающее его "как надо") Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 5. Пишем для примера код защищаемого класса Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 6. Делаем тестовую сборку вызывающую класс MyPrivateClass из защищаемой сборки, компилим его, прогоняем через наш консольный генератор подписи и в файл assemblyinfo.cs добавляем атрибут Код: plaintext 1. Делаем также неподписанную версию этой сборки. Запускаем - проверяем, все ok. Т.е. подписанная сборка класс создала, не подписываемая не смогла. Теперь поанализируем: Что же наваяли. 1.Итак, приватный ключ мы не распространяем он у нас в подписывающем консольном приложении т.е. есть маленькая надежда что злые юзеры не смогут сделать подпись другой сборки (хотя в нашем случае это и не надо т.к. злой юзер назовет свою сборку так же как и исходная и скопирует в него подписывающий атрибут), т.е. генерить подпись на имени сборки нельзя, итак первый вопрос опираясь на что генерить подпись? 2. В коде проверки подписи я использовал Assembly.GetEntryAssembly(); что естественно проверяет загруженную сборку "самого высокого уровня", наверное стоит переделать так чтоб можно было пройтись по всему стеку загруженных сборок и проверить у всех подписи, сходу не догадался как сделать, подскажите если кому не лень. p.s. Я вобщем-то ламер в вопросах криптографии и reflection, просто неожидано пришлось этим заниматься (что последние два часа и делаю), поэтому легко могу поверить что все что я тут нагородил полная фигня. И ни от чего не зашищает. Если это так то объясните мне пожалуйста мои ошибки, все когда то начинали. Заранее спасибо. Кому интересно полные исходные тексты могу выложить куда-нить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2004, 03:40 |
|
||
|
Правильно ли?
|
|||
|---|---|---|---|
|
#18+
Посмотрите ветку Code Access Security в MSDN посвежее. Там есть встроенные механизмы контроля кто что может запускать, а кто что не может. Ежели канал толстый и по английски говорите, то посмотрите вебкаст http://msdn.microsoft.com/theshow/Episode031/default.asp Там в общих чертах объясняют, че это такое и с чем его едят. Когда разберетесь, то буду очень благодарен если чиркните пару строчек о том чего добились и как :) Cheers Pete ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.06.2004, 18:10 |
|
||
|
|

start [/forum/topic.php?fid=20&fpage=1020&tid=1438946]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
120ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 223ms |
| total: | 416ms |

| 0 / 0 |
