>
>
PVS-Studio 7.13: SQL инъекции, Blame No…

Андрей Карпов
Статей: 673

PVS-Studio 7.13: SQL инъекции, Blame Notifier, .NET 5

Очередная версия статического анализатора PVS-Studio интересна следующими нововведениями: анализ непроверенных данных (tainted data analysis), поддержка .NET 5, утилита Blame Notifier научилась сортировать предупреждения по датам коммитов.

Хотим обратить внимание, что сайт продукта PVS-Studio сменил свой адрес и дизайн. Теперь он располагается здесь: https://pvs-studio.com. Если вы заметите на сайте какие-то ошибки, то мы будем рады, если вы сообщите нам про них.

Также хотим отметить, что теперь анализатор PVS-Studio включен в реестр отечественного ПО.

Tainted data analysis, SQL инъекции

В PVS-Studio для C++ уже давно имеются механизмы для поиска фрагментов кода, где используются непроверенные исходные данные. Про это ещё в 2018 году Сергей Васильев написал заметку "Стреляем в ногу, обрабатывая входные данные". Сейчас Сергей является руководителем C# направления, и он применил свои знания и опыт, чтобы развить tainted data analysis в ядре C# анализатора.

В C# анализаторе PVS-Studio появилось первое диагностическое правило из стандарта OWASP ASVS, ищущее в коде ошибки, связанные с непроверенными данными (tainted data). Это диагностическое правило V5608 для поиска потенциальных SQL инъекций. Данный класс ошибок занимает важное место в рейтинге OWASP Top 10, и в будущих релизах PVS-Studio мы будем добавлять диагностические правила для поиска множества других видов потенциальных tainted data уязвимостей.

.NET 5

Теперь PVS-Studio полноценно поддерживает анализ проектов, ориентированных на .NET 5 и использующих возможности C# 9. Кроме того, C# анализатор под Linux и macOS также использует платформу .NET 5 для своей работы. Таким образом, на этих системах потребуется наличие установленного пакета .NET 5 SDK. Версия анализатора под Windows, как и раньше, использует .NET Framework 4.7.2.

Более подробно об этом можно прочитать в статье "Свершилось! PVS-Studio поддерживает анализ проектов под .NET 5".

Blame Notifier

Утилита Blame Notifier для автоматической рассылки отчётов о найденных анализатором предупреждениях на основе blame информации из системы контроля версий теперь может сортировать предупреждения по номерам и датам коммитов. Это позволяет видеть предупреждения на код, появившиеся только за определённый день.

Раньше аналогичная функциональность была доступна только при использовании PVS-Studio в связке с SonarQube. Не все наши пользователи хотят использовать SonarQube, но им нужна возможность сортировки предупреждений по датам. Теперь стало больше вариантов и сценариев. Подробнее: Новые возможности PVS-Studio по оповещению разработчиков о найденных ошибках.

Примечание. Продолжая тему отчётов, следует отметить новую стороннюю утилиту. Теперь автоматическую публикацию отчётов можно делать не только с помощью Blame Notifier. Наш пользователь написал легковесный аналог (не требующий .NET для работы) данной утилиты, который вы можете попробовать на GitHub (Blame Notifier Script).

16 новых диагностик

  • V832. It's better to use '= default;' syntax instead of empty body.
  • V1070. Signed value is converted to an unsigned one with subsequent expansion to a larger type in ternary operator.
  • V1071. Consider inspecting the 'foo' function. The return value is not always used.
  • V1072. The buffer is securely cleared not on all execution paths.
  • V1073. Consider checking for misprints. Check the following code block after the 'if' statement.
  • V2577. MISRA. The function argument corresponding to a parameter declared to have an array type should have an appropriate number of elements.
  • V2578. MISRA. An identifier with array type passed as a function argument should not decay to a pointer.
  • V2579. MISRA. Macro should not be defined with the same name as a keyword.
  • V2580. MISRA. The 'restrict' specifier should not be used.
  • V2581. MISRA. Single-line comments should not end with a continuation token.
  • V2582. MISRA. Block of memory should only be freed if it was allocated by a Standard Library function.
  • V3170. Both operands of the '??' operator are identical.
  • V3171. Potentially negative value is used as the size of an array.
  • V3551. AUTOSAR. An identifier with array type passed as a function argument should not decay to a pointer.
  • V5013. OWASP. Storing credentials inside source code can lead to security issues.
  • V5608. OWASP. Possible SQL injection. Potentially tainted data is used to create SQL command.

Прочее

  • В C++ анализаторе улучшена поддержка проверки Ninja проектов на Windows с использованием JSON Compilation Database (compile_commands.json).
  • Использование компилятора Clang для сборки C++ анализатора PVS-Studio позволило сократить на 10% время его работы при проверке исходных файлов.
  • Плагин PVS-Studio для JetBrains Rider теперь поддерживает работу с версией Rider 2021.1.
  • В утилиту для поверки C++ и C# Visual Studio проектов PVS-Studio_Cmd.exe добавлена возможность передавать файл подавленных сообщений напрямую. До этого подавленные сообщения можно было добавлять только на уровне проектов и solution'а.

Некоторые статьи, опубликованные с момента предыдущего релиза