Wai Phyo Thu Ответов: 1

Fortify SCA указывает на проблемы с внедрением SQL даже в параметризованной хранимой процедуре


Кто-нибудь может помочь мне решить эту проблему?
Пожалуйста, направь меня на правильный путь.

Ниже приводится общая функция БД, которая вызывается из всех функций доступа к данным.
Все команды SQL являются хранимыми процедурами, и проблема находится в строке
aryOutputParam.Add(sqlParam)


Public Function ActionQuery(ByVal cmdText As String, ByRef errorCode As Integer, _
		Optional ByVal sqlParams As List(Of SqlParameter) = Nothing, _
		Optional ByRef ds As DataSet = Nothing) As ArrayList
	Dim aryOutputParamValues As New ArrayList

	Dim aryOutputParam As New ArrayList
	Dim command As SqlCommand = New SqlCommand
	Dim sqlParamReturn As SqlParameter = Nothing

	errorCode = clsDBHelper.ErrorCode.ERRORCODE_SUCCESS

	Try
		With command
			.Connection = conn
			.CommandText = cmdText
			.CommandTimeout = 6000

			If Not sqlParams Is Nothing AndAlso sqlParams.Count > 0 Then
				For Each sqlParam As SqlParameter In sqlParams
					.Parameters.Add(sqlParam)
					If sqlParam.Direction = ParameterDirection.Output Then
						aryOutputParam.Add(sqlParam)
					ElseIf sqlParam.Direction = ParameterDirection.ReturnValue Then
						sqlParamReturn = sqlParam
					End If
				Next
			End If

			If ds Is Nothing Then
				.ExecuteNonQuery()
			Else
				Dim da As SqlDataAdapter = New SqlDataAdapter()
				da.SelectCommand = command
				da.Fill(ds)
			End If
			If sqlParamReturn IsNot Nothing Then
				errorCode = sqlParamReturn.Value
			End If

			For Each sqlParam As SqlParameter In aryOutputParam
				aryOutputParamValues.Add(sqlParam.Value)
			Next
		End With
	Catch ex As Exception
		ErrorHandler.Handle(ex)
	End Try

	Return aryOutputParamValues
End Function


Спасибо за ваше время и внимание.

Что я уже пробовал:

Я тоже пытался
.Parameters.AddWithValue(sqlParam.ParameterName, sqlParam.Value)
вместо
.Parameters.Add(sqlParam)

CHill60

Лучше всего начать с форума поддержки программного обеспечения, с которым у вас возникли проблемы!Поддержка и услуги | Micro Focus[^]

Patrice T

Показать код хранимой процедуры.

1 Ответов

Рейтинг:
0

OriginalGriff

Проблема может заключаться в том, что вы передаете текстовую строку команды в метод в виде строки - поэтому фактический текст, передаваемый SQL в качестве команды, может быть любым, независимо от того, насколько тщательно сам метод использует параметры.
Это нормально, если вы называете это так:

ActionQuery("SELECT * FROM MyTable WHERE ID = @ID", ...

Но вы с таким же успехом могли бы это сделать:
ActionQuery(TextBox1.Text, ...
И это широко открыто для SQL-инъекций. Я не думаю, что вы можете решить эту проблему и сохранить текущую структуру метода.