Я создаю форму ASP.Net с элементом управления файловой загрузкой, который затем отправляет детали формы и файла другому администратору. Я хочу обеспечить это безопасное (для сервера и получателя). Вложение должно быть CV, поэтому я ограничу его типичными текстовыми документами.
Из того, что я могу сказать, лучше всего проверить, что расширение файла или тип MIME такого типа и проверить его на "магические числа", чтобы убедиться, что расширение не было изменено. Я не слишком обеспокоен тем, как это сделать, но хочу знать, действительно ли этого достаточно.
Я также с удовольствием использую сторонний продукт, который позаботится об этом, и я посмотрел пару:
Загрузка файла blueimp jQuery http://blueimp.github.io/jQuery-File-Upload/
и cutesoft ajaxuploader http://ajaxuploader.com/Demo/
Но, похоже, для blueimp требуется проверка пользовательского сервера (я предполагаю, что просто jQuery он просто обрабатывает проверку на стороне клиента), а .net проверяет тип MIME на соответствие расширению, но я думал, что тип MIME следует за расширением в любом случае.
Итак,
Нужно ли беспокоиться о безопасности сервера, когда файл добавляется как вложение, но не сохраняется? Есть ли плагин или элемент управления, который заботится об этой скважине? Если мне нужно что-то реализовать для проверки сервера, я достаточно хорошо согласую MIME-тип с "магическими числами"?
Я уверен, что ничто не является пуленепробиваемым на 100%, но загрузка файлов довольно распространенная, и я предполагаю, что большинство реализаций "достаточно безопасны" - но как!?
Если это актуально, вот мой базовый код до сих пор
<p>Please attach your CV here</p>
<asp:FileUpload ID="fileUploader" runat="server" />
и на submit
MailMessage message = new MailMessage();
if (fileUploader.HasFile)
{
try
{
if (fileUploader.PostedFile.ContentType == "text")
{
// check magic numbers indicate same content type... if(){}
if (fileUploader.PostedFile.ContentLength < 102400)
{
string fileName = System.IO.Path.GetFileName(fileUploader.PostedFile.FileName);
message.Attachments.Add(new Attachment(fileUploader.PostedFile.InputStream, fileName));
}
else
{
// show a message saying the file is too large
}
}
else
{
// show a message saying the file is not a text based document
}
}
catch (Exception ex)
{
// display ex.Message;
}
}