Набор правил "Рекомендуемые правила для управляемого кода"
Набор правил "Рекомендуемые правила для управляемого кода" используется для того, чтобы сосредоточиться на наиболее критических проблемах управляемого кода, включая возможные бреши в системе безопасности, сбои приложения и другие важные ошибки логики и проектирования.Данный набор правил должен входить в любой настраиваемый набор правил проекта.
Правило |
Описание |
---|---|
Типы, которым принадлежат освобождаемые поля, должны быть освобождаемыми |
|
Правильно объявите обработчики событий |
|
Пометьте сборки атрибутом 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 |