我创建一个ASP.Net窗体与文件上传控件,然后将电子邮件的形式和文件的详细信息到另一个管理员。我想确保这个安全(对于服务器和收件人)。附件应该是简历,因此我将其限制为典型的文本文档。使ASP.Net文件上传安全
从我能告诉我们最好的选择是检查文件扩展名或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" />
并提交
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;
}
}
_“当文件作为附件添加但未保存时,我是否需要担心服务器安全?”不确定你的意思?什么是“保存”?对于过程的哪一部分“安全”?如果条件不满足,你是否试图从'''.files'属性中移除文件对象? – guest271314
@ guest271314用户正在上传文件,并将其作为附件添加到随后发送的电子邮件中。据我所知这不会导致文件被保存在服务器上,我猜它最终会在邮件服务器上。收件人可能会保存它,但我的意思是它没有保存在服务器上。 – wunth
_“收件人可能会保存它,但我的意思是它没有保存在服务器上。”_您对所描述的过程有什么担忧? – guest271314