Набор правил "Рекомендуемые правила для управляемого кода"
Набор правил "Рекомендуемые правила Майкрософт для управляемого кода" используется для того, чтобы сосредоточиться на наиболее критических проблемах управляемого кода, включая возможные бреши в системе безопасности, сбои приложения и другие важные ошибки логики и проектирования.Данный набор правил должен входить в любой настраиваемый набор правил проекта.
Правило |
Описание |
---|---|
Типы, которым принадлежат освобождаемые поля, должны быть освобождаемыми |
|
Правильно объявите обработчики событий |
|
Пометьте сборки атрибутом AssemblyVersionAttribute |
|
Методы интерфейса должны быть доступны для вызова дочерним типам |
|
Типы, которым принадлежат собственные ресурсы, должны быть освобождаемыми |
|
Переместите P/Invokes в класс NativeMethods |
|
Не скрывайте методы базового класса |
|
Следует правильно реализовывать IDisposable |
|
Не вызывайте исключения в непредвиденных местах |
|
Избегайте повторяющихся сочетаний клавиш быстрого доступа |
|
Необходимо наличие точек входа P/Invoke |
|
Методы P/Invoke не должны быть видимыми |
|
Типы макета Auto не должны быть видимыми для COM |
|
Вызовите GetLastError сразу после P/Invoke |
|
Базовые типы, относящиеся к типу видимых COM-клиенту, должны быть видимыми для COM |
|
Методы регистрации COM должны быть согласованы |
|
Правильно объявите методы P/Invoke |
|
Удалите пустые методы завершения |
|
Поля типа значения должны быть переносимыми |
|
Объявления P/Invoke должны быть переносимыми |
|
Не блокируйте объекты со слабой идентификацией |
|
Проанализируйте SQL-запросы с целью выявления уязвимостей безопасности |
|
Укажите тип маршалинга для строковых аргументов P/Invoke |
|
Проверьте объявляемые параметры безопасности типов значений |
|
Указатели не должны быть видимыми |
|
Защищенные типы не должны предоставлять поля |
|
Безопасность метода должна быть надмножеством типа |
|
APTCA-методы должны вызывать только APTCA-методы |
|
APTCA-типы должны расширять только базовые APTCA-типы |
|
Не используйте косвенное представление методов с требованиями ссылки |
|
Переопределяющие требования ссылки должны быть идентичны базовым |
|
Ограничьте уязвимые предложения finally во внешних блоках try |
|
Для требований ссылок на тип необходимы требования наследования |
|
Критические с точки зрения безопасности типы могут не участвовать в эквивалентности типов |
|
Конструкторы по умолчанию должны быть по меньшей мере такими же критическими, как конструкторы по умолчанию базового типа |
|
Делегаты должны привязываться к методам с соответствующей прозрачностью |
|
Методы должны сохранять согласованную прозрачность при переопределении базовых методов |
|
Прозрачные методы должны содержать только поддающийся проверке IL |
|
Прозрачные методы не должны вызывать методы с атрибутом SuppressUnmanagedCodeSecurity |
|
Прозрачный код не должен ссылаться на элементы, критичные в плане безопасности |
|
Прозрачные методы не должны удовлетворять требования LinkDemand |
|
Типы должны быть настолько же критическими, как их базовые типы и интерфейсы. |
|
Прозрачные методы могут не использовать утверждения безопасности |
|
Прозрачные методы не должны вызывать машинный код |
|
Следует повторно вызывать исключение для сохранения сведений о стеке |
|
Не удаляйте объекты несколько раз |
|
Используйте встроенную инициализацию статических полей типов значений |
|
Не помечайте обслуживаемые компоненты атрибутом WebMethod |
|
Высвободите высвобождаемые поля |
|
Не вызывайте переопределяемые методы в конструкторах |
|
Высвобождаемые типы должны объявлять метод завершения |
|
Методы завершения должны вызывать метод завершения базового класса |
|
Реализуйте конструкторы сериализации |
|
Перегружать равенство операторов следует при перегрузке ValueType.Equals |
|
Отметьте точки входа Windows Forms меткой STAThread |
|
Пометьте все несериализуемые поля |
|
Вызовите методы базового класса для типов ISerializable |
|
Пометьте типы ISerializable атрибутом SerializableAttribute |
|
Правильно реализуйте методы сериализации |
|
Правильно реализуйте ISerializable |
|
Предоставьте правильные аргументы методам форматирования |
|
Правильно выполните проверку NaN |