Anil Dwivedi Ответов: 1

Уязвимость безопасности: .exe или другие вредоносные файлы не должны загружаться путем изменения их заголовка и расширения .pdf, .doc, .docx, .xls, .xlsx, .jpg, .jpeg, .png и т. д


Мы разрешили загружать файлы .pdf, .doc, .docx, .xls, .xlsx и изображения, такие как .jpg, .jpeg, .png в ASP.net MVC 5 все работает нормально, но моя команда безопасности подняла уязвимость безопасности. Команда безопасности изменяет расширение вредоносного файла как разрешенные расширения и изменяет заголовок с поддержкой заголовка типа файла инструментом до того, как сервер попадет и файл будет загружен на сервер.

Мы находим решение в asp.net MVC C# но не получил решения, чтобы остановить загрузку вредоносного файла на сервер через мой asp.net приложение MVC C#.

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

We have used following code and also used winista mime detect but unable to get proper solution. They are not returning proper mime type

public class urlmonMimeDetect
    {
        [DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
        private extern static System.UInt32 FindMimeFromData(
            System.UInt32 pBC,
            [MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
            [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
            System.UInt32 cbSize,
            [MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
            System.UInt32 dwMimeFlags,
            out System.UInt32 ppwzMimeOut,
            System.UInt32 dwReserverd
        );

        public static string GetMimeFromFile(Stream fs)
        {

            byte[] buffer = new byte[256];
            fs.Read(buffer, 0, 256);

            try
            {
                System.UInt32 mimetype;
                FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
                System.IntPtr mimeTypePtr = new IntPtr(mimetype);
                string mime = Marshal.PtrToStringUni(mimeTypePtr);
                Marshal.FreeCoTaskMem(mimeTypePtr);
                return mime;
            }
            catch (Exception e)
            {
                return "unknown/unknown";
            }
        }
    }

1 Ответов

Рейтинг:
0

OriginalGriff

В значительной степени, вы не можете. Единственный способ предотвратить это-загрузить файл и изучить его двоичное содержимое. EXE файл всегда начинается с двухбайтового префикса: .exe - Википедия[^] таким образом, вы можете проверить их - но поскольку они являются символами ASCII / Unicode, возможно (но маловероятно) получить ложные срабатывания.

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