Veracode выдает ошибку CWE 15:
Описание: Этот вызов system_data_dll.System.Data.OleDb.OleDbConnection.!newinit_0_1() позволяет внешнему управлению ›настройками системы. Аргумент функции строится с использованием ненадежных входных данных, что может нарушить работу службы или привести к непредвиденному поведению приложения. Первый аргумент !newinit_0_1() содержит испорченные данные. Испорченные данные ›были получены из более ранних вызовов system_web_dll.System.Web.HttpRequest.get_Files, ›system_data_dll.System.Data.SqlClient.SqlCommand.ExecuteScalar и system_web_dll.System.Web.HttpContext.get_User.
Исправление: Никогда не позволяйте ненадежным или иным образом ненадежным данным управлять настройками на уровне системы. Всегда проверяйте ненадежные входные данные, чтобы убедиться, что они соответствуют ожидаемому формату, по возможности используя процедуры централизованной проверки данных.
Я разрешаю веб-пользователям загружать файл через IHttpHandler в vb.net (веб-формы), который временно сохраняется во время обработки файла. Чтобы имя файла было уникальным, я добавляю context.user.identity.name в начало файла. Я не уверен, как это будет считаться ненадежным вводом или как его можно изменить.
Пользователи этой системы ограничены 6-символьным идентификатором, который должен начинаться с буквенного символа, а остальные 5 являются буквенно-цифровыми. У меня есть скруббер регулярных выражений в поле, прежде чем оно будет добавлено к имени локального файла. Я также проверяю, что пользователь аутентифицирован.
Я более чем обеспокоен, если это проблема доверия к аутентифицированному идентификатору пользователя. Очевидно, я мог бы выбрать какой-то другой способ добавления переменной перед файлом (но это усложнило бы отслеживание файлов, если что-то взорвалось).
dim wkId as string = "xxxxxx"
if context.User.Identity.IsAuthenticated then
wkId = ScrubWkId(context.User.Identity.Name)
end if
For i = 0 To context.Request.Files.Count - 1
controlName = context.Request.Form("controlName" & Trim(Str(i)))
sFile = context.Request.Files.Get(i)
If SharedCode.Common.Utilities.MimeTypeIsAllowed(sFile.FileName) Then
Select Case action
Case "dataload" 'only expect a single file on a dataload
'sFile = context.Request.Files.Get(i)
a = InStrRev(sFile.FileName.ToString, "\")
b = wkId & Right(sFile.FileName.ToString, sFile.FileName.ToString.Length - a)
Dim wkFile As String = GetFileUploadPath(context) & MakeValidFileName(b)
sFile.SaveAs(wkFile)