(Извините, если это глупый вопрос ....)
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)? Если да, то как?