Внешний контроль системы или настройки конфигурации

(Извините, если это глупый вопрос ....)

Veracode сообщает, что у моего веб-сайта есть проблема безопасности, связанная с использованием строки подключения из web.config.

Вот мой код.

Public Function ExecuteScalar(ByVal sql As String) As Object
    Dim obj As Object = Nothing

    Try
        Dim connStr as String = ConfigurationManager.ConnectionStrings("mydatabase").ConnectionString
        Using conn As New SqlConnection(connStr)   '''Veracode reports the issue come from this line
            conn.Open()
            If conn IsNot Nothing Then
                '''execute my sql
            End If
        End Using

    Catch ex As Exception
        Throw ex
    End Try

    Return obj
End Function

Веракод сказал:

Этот вызов system_data_dll.System.Data.SqlClient.SqlConnection.! Newinit_0_1 () позволяет осуществлять внешний контроль системных настроек. Аргумент функции создается с использованием вводимых пользователем данных, что может нарушить работу службы или привести к неожиданному поведению приложения. Первый аргумент! Newinit_0_1 () содержит испорченные данные из переменной connStr. Испорченные данные возникли из предыдущих вызовов system_web_dll.system.web.httprequest.get_item, system_data_dll.system.data.common.dbdataadapter.fill, system_data_dll.system.data.sqlclient.sqlcommand.executescalar_dllmobile.consalar_dll и fmmo

Исправление:

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

О таком же использовании сообщил CWE: http://cwe.mitre.org/data/definitions/15.html

Хорошо, в предложении Veracode говорится, что я должен проверить формат строки подключения, прежде чем использовать ее для создания объекта SqlConnection.

Я также спросил профессора Google, как проверить формат строки подключения. Но возвращенные результаты говорят, что мы должны создать объект SqlConnection, а затем открыть его.

Если ответ положительный, строка подключения также означает допустимый формат. В противном случае строка подключения недействительна.

К сожалению, Veracode не принимает этот ответ.

Итак, мой вопрос:

Должны ли мы проверять формат строки подключения перед созданием объекта SqlConnection (как сказал Veracode)? Если да, то как?


person NoName    schedule 28.11.2016    source источник


Ответы (2)


Проблема не в формате строки подключения, а в том, что ею может управлять кто-то не предназначенный. Например, злоумышленник может изменить ваш web.config и подключить ваше приложение к поддельной базе данных для обслуживания поддельных данных. Обратите внимание, что такой злоумышленник может быть внутренним по отношению к вашей организации (недовольный сотрудник ИТ-отдела) или внешним злоумышленником, который уже получил определенный уровень доступа.

Итак, вопрос в том, доверяете ли вы своему файлу web.config в соответствии с вашей моделью угроз. Вероятно, вы это делаете по нескольким причинам (у вас есть хорошие процессы для снижения рисков), и в этом случае это будет «смягчено конструктивно» в терминах Veracode.

По сути, это просто предупреждение, призванное привлечь внимание к тому, что web.config в некотором смысле является внешним по отношению к вашему приложению и может быть изменен большим количеством людей, чем вы первоначально могли подумать, а изменение его непреднамеренными людьми может привести к нежелательным результатам.

person Gabor Lengyel    schedule 28.11.2016
comment
Я так думаю в большинстве случаев, да. :) - person Gabor Lengyel; 30.03.2017

У меня была аналогичная проблема с Veracode, и они сказали мне убедиться, что файл Web.config был зашифрован.

Вы можете сделать это с помощью некоторых действий командной строки на сервере, на котором развернуто приложение.

 aspnet_regiis -pe "connectionStrings" -app "/" -site 1

или если вы хотите расширить свою безопасность до раздела appSettings

 aspnet_regiis -pe "appSettings" -app "/" -site 1

Вы получите номер сайта, открыв IIS и перейдя в расширенные настройки сайта. Это поле с надписью «ID».

Вот статья MSDN, объясняющая более подробно: https://msdn.microsoft.com/en-us/library/zhhddkxy.aspx

person Rafiki    schedule 08.08.2018