Что-то не так с не подписанием блока.NET?

Для меня объектная ориентация в C должна иметь эти функции:

  1. Инкапсуляция и сокрытие данных (может быть достигнут с помощью структур / непрозрачных указателей)

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

  3. Конструктор и функциональность деструктора (не легкий достигнуть)

  4. проверка Типа (по крайней мере, для пользовательских типов, поскольку C не осуществляет никого)

  5. Подсчет ссылок (или что-то для реализации RAII)

  6. Ограниченная поддержка обработки исключений (setjmp и longjmp)

вдобавок к вышеупомянутому, это должно полагаться на спецификации ANSI/ISO и не должно полагаться на определенную для компилятора функциональность.

93
задан Peter Mortensen 30 August 2013 в 17:23
поделиться

8 ответов

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

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

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


РЕДАКТИРОВАТЬ С момента написания этого ответа вы можете видеть, что как сторонники, так и противники имеют примерно одинаковую поддержку. Здесь явно нет правильного ответа.

Смысл, который вызвал это изменение, заключается в том, что в настоящее время мы берем так много библиотек с открытым исходным кодом из NuGet, и многие из них вообще не подписаны. Если вы хотели подписать свое собрание, вы d также должны быть подписаны все зависимости. Многие из подписанных библиотек с открытым исходным кодом имеют закрытые ключи, используемые для подписи, публично доступны в их исходных репозиториях.

Как и во всем остальном, приходится идти на компромиссы. По моему опыту работы в частных средах, преимущества подписи в основном теоретические (или академические, как упоминает @ user289100 ), если только вы не обеспокоены тем, что правительственные учреждения изменяют ваш код, и в этом случае вам нужно параноик по поводу такого количества уровней вашей инфраструктуры, что подписание может показаться небольшим усилием. В противном случае количество проблем, которые возникают из-за необходимости подписывать все, просто не стоит того. Однако ваша среда может иметь другие требования, или вы можете быть мазохистом!

См. Также Teun D '

48
ответ дан 24 November 2019 в 06:17
поделиться

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

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

3
ответ дан 24 November 2019 в 06:17
поделиться

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

Ваш анекдот о самоподписанном коде Microsoft кажется мне особенно подозрительным. Если MS не подписала код, то, наверное, есть причина, не так ли? И, подписывая его, вы берете на себя ответственность за то, что не писали - еще одна возможность укусить вас в будущем.

9
ответ дан 24 November 2019 в 06:17
поделиться

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

4
ответ дан 24 November 2019 в 06:17
поделиться

Подумайте о том, чтобы сделать это, если вы собираетесь что-то отправлять и / или у вас действительно есть причина для этого. В любом другом случае это просто хлопот. Я бы спросил вашего товарища по работе, что он на самом деле получает от этого.

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

2
ответ дан 24 November 2019 в 06:17
поделиться

Еще одна вещь, связанная с подписанием сборки, заключается в том, что нельзя ввести неправильную сборку вместо вашей (также - себя случайно). Например, если вы создаете программу, которая ссылается на сборку Foo.dll версии 1.0, кто-то может создать сборку той же версии и заменить вашу, когда вы подпишете свою библиотеку, это будет невозможно (в по крайней мере, я не думаю, что это легко возможно).

4
ответ дан 24 November 2019 в 06:17
поделиться

Еще один момент: подписание сборок нарушает обратную совместимость по версиям. Все ваши ссылки начинают включать номера версий, а версии с другими номерами версий считаются несовместимыми. Это препятствует обновлению до более новых версий распределенных сборок.

На мой взгляд, вы должны кодировать сборки только в том случае, если вы видите какой-то конкретный выигрыш от этого:

  • если вы развертываете в средах, где ненадежные люди могут коснуться ваших сборок
  • ] в определенных моделях подключаемых модулей, где вы хотите использовать сертификат в качестве доказательства для обновления доверия
  • , если ваш код должен быть вызван из другого подписанного кода (проект, например, log4net, обоснованно подписывает свой код, чтобы его можно было широко использовать ; они сильно испортили совместимость, потеряв свой секретный ключ несколько лет назад, что является еще одним риском подписания кода).
  • , если вы хотите развернуть в GAC
38
ответ дан 24 November 2019 в 06:17
поделиться

Я воспользовался преимуществами неподписанных сборок, чтобы обойти проблемы, прежде чем и в академических условиях показал людям, почему это важно. Я заменил файл DLL без подписи (опять же в академической среде) на файл с тем же именем, с теми же подписями и использовал .NET Reflector для копирования и вставки исходного кода, но в моем я отправляли по электронной почте имена пользователей и пароли, которые передавались перед вызовом «настоящего» кода.

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

Подписание собраний никогда не бывает лишним. На это уходит 30 секунд. Это все равно, что сказать, что запирать двери - это излишне, если вы живете в деревне. Если вы хотите сыграть со своими вещами, оставьте его открытым. Чтобы вас уволили, достаточно одного нарушения безопасности. Чтобы подписать сборку, требуется всего 30 секунд, и нет никакого экономического обоснования, чтобы не делать этого. Влияние на производительность незначительно.

60
ответ дан 24 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

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