PDA

View Full Version : سوال: وقتی پسوند فایل رو تغییر میدم موقع آپلود contenttype اونو تشخیص نمیده و فایل رو مجاز میشناسه



dontspeak
پنج شنبه 20 مرداد 1390, 01:33 صبح
سلام دوستان من با استفاده از دستور زیر type فایل آپلود شده رو میگیرم ولی وقتی پسوند فایل رو عوض میکنم فایل رو با پسوند جدید میشناسه. من میام پسوند یه فایل rar رو jpg میکنم و وقتی contenttype اونو می خونم میگه jpg هست!!!!!! در حالی که قبلا اینطور نبود
FileUpload1.PostedFile.ContentType.ToString();
فقط تنها چیزی که ممکنه باشه اینه که من .netFarmeWork خودم رو با ویندوز آپدیت کردم

afshinmu
پنج شنبه 20 مرداد 1390, 04:22 صبح
سلام .
خب طبیعتا با پسوند جدید باید بشناسه .
اون از کجا بدون پسوند قبلی چی بوده؟؟؟؟مگه علم غیب داره؟

وقتی پسوند فایلی رو عوض می کنید دیگه این پسوند مال اون فایله .

قدیما هم از وقتی من یادم میاد همینجوری بوده .

موفق باشید :چشمک:

ASPX
پنج شنبه 20 مرداد 1390, 10:01 صبح
البته دوست عزیز afshinmu میشه نوع واقعی فایل رو فارغ از پسوندی که داره تشخیص داد!


using System.Runtime.InteropServices;
using System.IO;

,


[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 string getMimeFromFile(string filename)
{
if (!File.Exists(filename))
throw new FileNotFoundException(filename + " not found");

byte[] buffer = new byte[256];
using (FileStream fs = new FileStream(filename, FileMode.Open))
{
if (fs.Length >= 256)
fs.Read(buffer, 0, 256);
else
fs.Read(buffer, 0, (int)fs.Length);
}
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";
}
}


نحوه استفادش هم از تابع getMimeFromFile و آدرس فایل رو بهش میدی در اصل نوع واقعی فایل رو بهت میده حتی اگه پسوند فایل عوض بشه

dontspeak
پنج شنبه 20 مرداد 1390, 12:40 عصر
من یادمه توی یه آموزشی دیدم کدی که بالا نوشته بودم نوع فایل رو سوای پسوندش می خونه در حقیقت فایل رو می خونه و نوع واقعیشو میده. و از این کد قبلا استفاده کردم و یادمه که جوابم گرفتم ولی نمی دونم چیزی رو جا گذاشتم یا اینکه ...
و از لطفتون هم ممنونم من کد شما رو بصورت زیر بکار بردم
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.InteropServices;
using System.IO;

public partial class _Default : System.Web.UI.Page
{
[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 string getMimeFromFile(string filename)
{
if (!File.Exists(filename))
throw new FileNotFoundException(filename + " not found");

byte[] buffer = new byte[256];
using (FileStream fs = new FileStream(filename, FileMode.Open))
{
if (fs.Length >= 256)
fs.Read(buffer, 0, 256);
else
fs.Read(buffer, 0, (int)fs.Length);
}
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";
}
}
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = getMimeFromFile(FileUpload1.FileName);
//Label1.Text = FileUpload1.PostedFile.ContentType.ToString();
}
}
ولی وقتی به این خط میرسه
byte[] buffer = new byte[256];
میگه فایل مورد نظر یافت نشد! چکار باید بکنم؟

ASPX
پنج شنبه 20 مرداد 1390, 12:56 عصر
به نظرم اول باید فایلو آپلود کنی . چون فایل هنوز آپلود نشده ارور میده. بعد مسیر فیزیکی فایل رو بهش پاس کن .اگه پسوندش درست نبود حذفش کن و به کاربر پیام بده

afshinmu
جمعه 21 مرداد 1390, 04:09 صبح
این که بله ولی ایشون گفتند پسوند فایل رو تغییر میدن ، پسوند جدید ر میشناسه . نه اینکه از این کد طویل استفاده کرده باشند و باز هم این مشکل رو داشته باشه .
:چشمک:

reza_program
شنبه 26 فروردین 1391, 14:56 عصر
به نظرم اول باید فایلو آپلود کنی . چون فایل هنوز آپلود نشده ارور میده. بعد مسیر فیزیکی فایل رو بهش پاس کن .اگه پسوندش درست نبود حذفش کن و به کاربر پیام بده
آقا سلام
میگم اگه فایل ویروس باشه اون وفت چی؟
اگه آپلود بشه رو هاست ، مشکلی ایجاد نمیکنه!؟

ghbn1362
شنبه 26 فروردین 1391, 17:20 عصر
بستگی به هاست داره اگر Antivirus و Trojan داشته باشه اجازه نمیده و فایل رو حذق یا حداقل قرنتینه می کنه استفاده از فایل های با پسوندها غیر واقعی یکی از روش های هکه که برای آپلود شل ازش استفاده میشه

minaalamshahi
شنبه 12 مرداد 1392, 23:09 عصر
راهی نیست که فایل رو قبل از آپلود تشخیص بدیم
با content type نمیشه تغییر پسورد رو تشخیص نمیده

minaalamshahi
دوشنبه 14 مرداد 1392, 01:46 صبح
[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 );









private static readonly Dictionary<string, string> spDicMIMETypes = new Dictionary<string, string> {
{"ai", "application/postscript"}, {"aif", "audio/x-aiff"}, {"aifc", "audio/x-aiff"}, {"aiff", "audio/x-aiff"}, {"asc", "text/plain"}, {"atom", "application/atom+xml"}, {"au", "audio/basic"}, {"avi", "video/x-msvideo"}, {"bcpio", "application/x-bcpio"}, {"bin", "application/octet-stream"}, {"bmp", "image/bmp"}, {"cdf", "application/x-netcdf"}, {"cgm", "image/cgm"}, {"class", "application/octet-stream"}, {"cpio", "application/x-cpio"}, {"cpt", "application/mac-compactpro"}, {"csh", "application/x-csh"}, {"css", "text/css"}, {"dcr", "application/x-director"}, {"dif", "video/x-dv"}, {"dir", "application/x-director"}, {"djv", "image/vnd.djvu"}, {"djvu", "image/vnd.djvu"}, {"dll", "application/octet-stream"}, {"dmg", "application/octet-stream"}, {"dms", "application/octet-stream"}, {"doc", "application/msword"}, {"docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {"dotx", "application/vnd.openxmlformats-officedocument.wordprocessingml.template"}, {"docm","application/vnd.ms-word.document.macroEnabled.12"}, {"dotm","application/vnd.ms-word.template.macroEnabled.12"}, {"dtd", "application/xml-dtd"}, {"dv", "video/x-dv"}, {"dvi", "application/x-dvi"}, {"dxr", "application/x-director"}, {"eps", "application/postscript"}, {"etx", "text/x-setext"}, {"exe", "application/octet-stream"}, {"ez", "application/andrew-inset"}, {"gif", "image/gif"}, {"gram", "application/srgs"}, {"grxml", "application/srgs+xml"}, {"gtar", "application/x-gtar"}, {"hdf", "application/x-hdf"}, {"hqx", "application/mac-binhex40"}, {"htc", "text/x-component"}, {"htm", "text/html"}, {"html", "text/html"}, {"ice", "x-conference/x-cooltalk"}, {"ico", "image/x-icon"}, {"ics", "text/calendar"}, {"ief", "image/ief"}, {"ifb", "text/calendar"}, {"iges", "model/iges"}, {"igs", "model/iges"}, {"jnlp", "application/x-java-jnlp-file"}, {"jp2", "image/jp2"}, {"jpe", "image/jpeg"}, {"jpeg", "image/jpeg"}, {"jpg", "image/jpeg"}, {"js", "application/x-javascript"}, {"kar", "audio/midi"}, {"latex", "application/x-latex"}, {"lha", "application/octet-stream"}, {"lzh", "application/octet-stream"}, {"m3u", "audio/x-mpegurl"}, {"m4a", "audio/mp4a-latm"}, {"m4b", "audio/mp4a-latm"}, {"m4p", "audio/mp4a-latm"}, {"m4u", "video/vnd.mpegurl"}, {"m4v", "video/x-m4v"}, {"mac", "image/x-macpaint"}, {"man", "application/x-troff-man"}, {"mathml", "application/mathml+xml"}, {"me", "application/x-troff-me"}, {"mesh", "model/mesh"}, {"mid", "audio/midi"}, {"midi", "audio/midi"}, {"mif", "application/vnd.mif"}, {"mov", "video/quicktime"}, {"movie", "video/x-sgi-movie"}, {"mp2", "audio/mpeg"}, {"mp3", "audio/mpeg"}, {"mp4", "video/mp4"}, {"mpe", "video/mpeg"}, {"mpeg", "video/mpeg"}, {"mpg", "video/mpeg"}, {"mpga", "audio/mpeg"}, {"ms", "application/x-troff-ms"}, {"msh", "model/mesh"}, {"mxu", "video/vnd.mpegurl"}, {"nc", "application/x-netcdf"}, {"oda", "application/oda"}, {"ogg", "application/ogg"}, {"pbm", "image/x-portable-bitmap"}, {"pct", "image/pict"}, {"pdb", "chemical/x-pdb"}, {"pdf", "application/pdf"}, {"pgm", "image/x-portable-graymap"}, {"pgn", "application/x-chess-pgn"}, {"pic", "image/pict"}, {"pict", "image/pict"}, {"png", "image/png"}, {"pnm", "image/x-portable-anymap"}, {"pnt", "image/x-macpaint"}, {"pntg", "image/x-macpaint"}, {"ppm", "image/x-portable-pixmap"}, {"ppt", "application/vnd.ms-powerpoint"}, {"pptx","application/vnd.openxmlformats-officedocument.presentationml.presentation"}, {"potx","application/vnd.openxmlformats-officedocument.presentationml.template"}, {"ppsx","application/vnd.openxmlformats-officedocument.presentationml.slideshow"}, {"ppam","application/vnd.ms-powerpoint.addin.macroEnabled.12"}, {"pptm","application/vnd.ms-powerpoint.presentation.macroEnabled.12"}, {"potm","application/vnd.ms-powerpoint.template.macroEnabled.12"}, {"ppsm","application/vnd.ms-powerpoint.slideshow.macroEnabled.12"}, {"ps", "application/postscript"}, {"qt", "video/quicktime"}, {"qti", "image/x-quicktime"}, {"qtif", "image/x-quicktime"}, {"ra", "audio/x-pn-realaudio"}, {"ram", "audio/x-pn-realaudio"}, {"ras", "image/x-cmu-raster"}, {"rdf", "application/rdf+xml"}, {"rgb", "image/x-rgb"}, {"rm", "application/vnd.rn-realmedia"}, {"roff", "application/x-troff"}, {"rtf", "text/rtf"}, {"rtx", "text/richtext"}, {"sgm", "text/sgml"}, {"sgml", "text/sgml"}, {"sh", "application/x-sh"}, {"shar", "application/x-shar"}, {"silo", "model/mesh"}, {"sit", "application/x-stuffit"}, {"skd", "application/x-koan"}, {"skm", "application/x-koan"}, {"skp", "application/x-koan"}, {"skt", "application/x-koan"}, {"smi", "application/smil"}, {"smil", "application/smil"}, {"snd", "audio/basic"}, {"so", "application/octet-stream"}, {"spl", "application/x-futuresplash"}, {"src", "application/x-wais-source"}, {"sv4cpio", "application/x-sv4cpio"}, {"sv4crc", "application/x-sv4crc"}, {"svg", "image/svg+xml"}, {"swf", "application/x-shockwave-flash"}, {"t", "application/x-troff"}, {"tar", "application/x-tar"}, {"tcl", "application/x-tcl"}, {"tex", "application/x-tex"}, {"texi", "application/x-texinfo"}, {"texinfo", "application/x-texinfo"}, {"tif", "image/tiff"}, {"tiff", "image/tiff"}, {"tr", "application/x-troff"}, {"tsv", "text/tab-separated-values"}, {"txt", "text/plain"}, {"ustar", "application/x-ustar"}, {"vcd", "application/x-cdlink"}, {"vrml", "model/vrml"}, {"vxml", "application/voicexml+xml"}, {"wav", "audio/x-wav"}, {"wbmp", "image/vnd.wap.wbmp"}, {"wbmxl", "application/vnd.wap.wbxml"}, {"wml", "text/vnd.wap.wml"}, {"wmlc", "application/vnd.wap.wmlc"}, {"wmls", "text/vnd.wap.wmlscript"}, {"wmlsc", "application/vnd.wap.wmlscriptc"}, {"wrl", "model/vrml"}, {"xbm", "image/x-xbitmap"}, {"xht", "application/xhtml+xml"}, {"xhtml", "application/xhtml+xml"}, {"xls", "application/vnd.ms-excel"}, {"xml", "application/xml"}, {"xpm", "image/x-xpixmap"}, {"xsl", "application/xml"}, {"xlsx","application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {"xltx","application/vnd.openxmlformats-officedocument.spreadsheetml.template"}, {"xlsm","application/vnd.ms-excel.sheet.macroEnabled.12"}, {"xltm","application/vnd.ms-excel.template.macroEnabled.12"}, {"xlam","application/vnd.ms-excel.addin.macroEnabled.12"}, {"xlsb","application/vnd.ms-excel.sheet.binary.macroEnabled.12"}, {"xslt", "application/xslt+xml"}, {"xul", "application/vnd.mozilla.xul+xml"}, {"xwd", "image/x-xwindowdump"}, {"xyz", "chemical/x-xyz"}, {"zip", "application/zip"}
};








protected string MyString;
protected void Button1_Click1(object sender, EventArgs e)
{
FileStream newf=new FileStream(System.IO.Path.GetFullPath(FileUpload1. PostedFile.FileName),FileMode.OpenOrCreate);
byte[] buffer=new byte[FileUpload1.PostedFile.ContentLength];
newf.Read (buffer,0,FileUpload1.PostedFile .ContentLength);
Response.Write(buffer);

string sMimeType = null;

try
{
UInt32 unMimeType;
FindMimeFromData(0, null, buffer, 256, null, 0, out unMimeType, 0);
IntPtr pMimeType = new IntPtr(unMimeType);
string sMimeTypeFromFile = Marshal.PtrToStringUni(pMimeType);
Marshal.FreeCoTaskMem(pMimeType);
//if (!String.IsNullOrEmpty(sMimeTypeFromFile) && sMimeTypeFromFile != "text/plain" && sMimeTypeFromFile != "application/octet-stream")
//{
sMimeType = sMimeTypeFromFile;
//}

}
catch { }
Label1.Text = sMimeType;
}


این روش رو هم تست کردم

روی بعضی مرورگها فقط میده
application/octet-streamروی بعضی هم فقط jpg رو تشخیص میده

کسی راهی نداره

که قبل از ذخیر فایل رو سرور تشخیص بدیم که پسوند فایل دستکاری نشده باشه؟