Comments 11
Неужели есть планы по добавлению PHP?
Ждёте? :)
А почему пример плохого кода приведён для языка, который не поддерживается PVS-Studio?
Хотелось найти примеры каких-нибудь уязвимостей (CVE), чтобы помимо описания самой уязвимости было и её представление в исходном коде. С C# в этом плане туговато, к сожалению — редко в базе CVE есть примеры C# кода (в отличии от того же PHP, например). Я в своё время даже заметку писал на эту тему: "Что не так с уязвимостями в C# проектах?"
Поэтому мы взяли один из примеров CVE на другом языке, прикинули, как аналогичное место выглядело бы на C# (одинаковый паттерн) и убедились, что PVS-Studio обнаруживает проблему.
Надеюсь, у вас эта диагностика не сделана по принципу "в коде переменная с именем password, инициализирующаяся хоть чем-то => поднимаем панику"? Так себя ведёт одна конкурирующая система, ругающаяся на код типа
private static String password = "";
Например, пароль может быть передан в качестве параметра в какой-нибудь метод — V5601 найдёт это. Скоро выходит новая версия, где эта диагностика будет доступна — я бы посоветовал попробовать её в деле.
Так как всё таки сделано данное правило?
- переменная/поле/свойство/параметр, куда записывается строковый литерал
- параметр, в который передаётся строковый литерал
- что-то, что сравнивается со строковым литералом через ==, switch, Equals и т.д.
- название метода, возвращающего строковый литерал
Диагностика анализирует идентификатор и оценивает, насколько он связан с какими-то конфиденциальными данными. В большинстве случаев идентификатор это что-то простое типа GetPassword или myPassword. Ну и конечно же диагностика проверяет, что сам строковый литерал не пустой.
Мне не понятно, по какому признаку строка признаётся конфиденциальной.
Как я и говорил, чудес тут нет. Если Вам кажется, что алгоритм можно было бы как-то улучшить, то прошу поделиться этими идеями и возможно, они помогут нам сделать диагностику лучше :)
PVS-Studio вступает в битву с захардкоженными паролями