PDA

View Full Version : سوال: بررسی دقیق نوع فایل جهت آپلود



moferferi
چهارشنبه 06 آذر 1392, 15:14 عصر
سلام.
من میخوام نوع فایل اپلود شده را جهت ذخیره در دیتابیس برسی کنم
تمام راه هایی که توی سایت پیشنهاد شده
یا از طریق بررسی پسوند فایل از طریق جاوا هست.که از لحاض امنیتی کاملا مشکل داره.
و یا چک کردن پسوند فایل بعد از اپلود در سرور که باز هم این روش اصولی نیست.چرا که با تغییر پسوند یه فایل به راحتی میشه اونا دور زد

اکثر دوستان پینهاد داده بودن که MIME Types فایل را بررسی کنیم.اما توی سایت http://stackoverflow.com
و توی این تایپیک و در جواب شماره 3 (http://stackoverflow.com/questions/12444477/check-type-of-uploaded-file)این روش هم مردود اعلام شده.
خودش یه روشی را پیشنهاد کرده که تا به حال ندیده بودم

البته یه dll ای واسه دانلود گذاشته.که متاسفانه لینکش خرابه.

از دوستان کسی ا این روشی که توی اینجا (http://stackoverflow.com/questions/12444477/check-type-of-uploaded-file) معرفی شده آشنایی داره؟و یا اینکه لینک سالم dll معرفی شده را داره یا نه؟

pedramb66
چهارشنبه 06 آذر 1392, 20:17 عصر
من از روش زیر استقاده کردم:
string fi = "";
if (FileUpload1.PostedFile != null)
{
if (!Directory.Exists(Server.MapPath("~/pic/")))
{
Directory.CreateDirectory(Server.MapPath("~/pic/"));
}
HttpPostedFile pic = FileUpload1.PostedFile;
if (pic.ContentLength == 0)
{
return;
}
string[] validext = { ".jpg", ".png", ".jpeg" };
string ext = Path.GetExtension(FileUpload1.PostedFile.FileName) ;
if (Array.IndexOf(validext, ext.ToLower()) < 0)
{
lblerrorf.Visible = true;
lblerrorf.Text = "Invalid file type.You can select image files!!";
return;
}

long size = FileUpload1.PostedFile.ContentLength;
size = size / 1024;
if (size > 2048)
{
lblerrorf.Visible = true;
lblerrorf.Text = "File size should not be larger than 2 MB.";
return;
}
string filename = Path.GetFileName(FileUpload1.PostedFile.FileName);

filename = filename.ToLower();
filename = filename.Replace(" ", "").ToString();
filename = filename.Replace("#", "").ToString();
filename = filename.Replace("(", "").ToString();
filename = filename.Replace(")", "").ToString();
while (System.IO.File.Exists(Server.MapPath("~/pic/" + filename)))

filename = "1" + filename;
fi = "~/pic/" + filename;

FileUpload1.SaveAs(Server.MapPath("~/pic/" + filename));


}

fakhravari
چهارشنبه 06 آذر 1392, 20:33 عصر
روش بدرد بخوری پیدا نکردم.
برسی نام فایل فعلا بهتره :بامزه:

moferferi
پنج شنبه 07 آذر 1392, 19:16 عصر
تمام این روش ها قابل دروزدنه.
به راحتی میشه یه به یه فایل خطرناک پسوند jpg بدین و بعد اپلود کنین.
مشکلم من اینه که میخوام فایل را دیتابیس ذخیره کنم.واگه از نوع فایل و امنیت اون مطمئن نباشم خطرناکه.

روشی که توی سایت بالا گفتم به نظرم جالب بود.اما متاسفانه لینک دانلود اون dll خرابه

nadia92
شنبه 25 مرداد 1393, 11:08 صبح
منم این مشکلو دارم