SonarQube сообщает об SQL-инъекции для имени хранимой процедуры - PullRequest
0 голосов
/ 16 мая 2018

Я начал использовать SonarQube для статического анализа.Он сообщает мне довольно много уязвимостей SQL-инъекций, но, похоже, false positive обнаружение.

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

SonarQube сообщает:

Make sure to sanitize the parameters of this SQL command.

Пример кода:

using (SqlCommand cmd = new SqlCommand(procName, Connection))
{
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.Parameters.Add(new SqlParameter("@param", SqlDbType.NVarChar, 32)).Value = record;
    using (SqlDataReader dr = cmd.ExecuteReader())
    {
    }
}

Может ли быть какая-либо SQL-инъекция только для имени процедуры?Нужно ли дезинфицировать имя?

1 Ответ

0 голосов
/ 18 мая 2018

Я допускаю, что реализация S3649 не самая умная, она вызовет проблемы, если вы передадите непостоянную строку в свойство CommandText SqlCommand или соответствующий аргумент ctor.

Если вы уверены, что значение CommandText не исходит из потенциально эксплуатируемого источника, например, параметра строки запроса, лучший способ справиться с этой конкретной проблемой - пометить его как Won't Fixв SonarQube.Если вы также используете SonarLint в подключенном режиме для этого проекта, он автоматически исключит появление проблемы в IDE.

С другой стороны, если значение может быть получено из пригодного для использования источника, такого как запросстроковый параметр, тело запроса, cookie, заголовок и т. д. настройки CommandType = StoredProcedure все еще может быть недостаточно, чтобы предотвратить выполнение злоумышленником другой хранимой процедуры в вашей базе данных, чем вы предполагали ... В таком случае, возможно, будет лучше, есливы создаете отдельные методы-оболочки для хранимых процедур, которые у вас есть, тем самым не позволяя потенциальным злоумышленникам выбрать другой SP для выполнения.

...