PDA

View Full Version : سوال: فیلتر کردن فایل های کنترل فایل اپلود



mohsen.nsb44
دوشنبه 14 فروردین 1391, 14:50 عصر
سلام من یک فایل اپلود دارم که کاربر برای اینکه عکسشو تو صفحه ذخیره کنه گزاشتم بعد یک کنترل RegularExpressionValidator گزاشتم و قسمت ValidationExpression="^.+(.jpg|.JPG|.gif|.GIF)$" گرفتم اما بجز عکس فایل mp3 رو هم ذخیره میکنه مشکل از چیه؟

farhud
دوشنبه 14 فروردین 1391, 16:30 عصر
http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28%22ASP%3aFILEUPLOAD%22%29;k%28VS.HTMLDESIGNE R.HTML%29&rd=true

d_derakhshani
دوشنبه 14 فروردین 1391, 16:48 عصر
برای ذخیره تصویر رو validation های سمت کلاینت حساب نکن. سمت سرور با استفاده از گرفتن پسوند فایل آپلود شده بررسی کن که دقیقا همون چیزی هست که میخای یا نه. متد
System.IO.Path.GetExtension برای اینکار مناسبه.
اما اگه میخای حتما توصیر باشه کد مطمئن تری هم وجود داره(چون ممکنه یک فایل متنی رو به jpeg تغییر پسوند داده باشند و برنامه متوجه نشه). واسه اینکار از کد زیر استفاده کن:

try
{
System.Drawing.Bitmap.FromStream(FileUpload1.FileC ontent);
}
catch (Exception)
{

//This file is not image format
}

fakhravari
دوشنبه 14 فروردین 1391, 18:30 عصر
با سلام
بهترین راه باید ContentType کنترل کنید
string[] ax_size = { "image/gif", "image/bmp", "image/jpeg", "image/pjpeg", "image/png", "image/tiff", "image/vnd", "image/svg+xml" };
string[] ax = { "image/gif", "image/bmp", "image/jpeg", "image/pjpeg", "image/png", "image/tiff", "image/vnd", "image/svg+xml" };
string[] Audio = { "audio/basic", "audio/L24", "audio/mp4", "audio/mpeg", "audio/ogg", "audio/vorbis", "audio/x-ms-wma", "audio/x-ms-wax", "audio/vnd.rn-realaudio", "audio/vnd.wave", "audio/webm" };
string[] Video = { "video/mpeg", "video/mp4", "video/ogg", "video/quicktime", "video/webm", "video/x-matroska", "video/x-ms-wmv" };
string[] File = { "application/octet-stream", "application/x-rar-compressed", "application/rar",
"application/x-zip-compressed", "application/x-tar", "text/plain",
"application / x - compressed", "application / zip", "multipart / x - zip" };

mohsen.nsb44
دوشنبه 14 فروردین 1391, 18:41 عصر
دوستان من تویه مقاله خوندم که یک هکر میتونه مثلا یک صفحه asp اپلود کنه و از اون طریق کارهاشو انجام بده مثلا کانکشن استرینگ باعث بروز خطا و ....
به همین خاطر میخوام فایلی جز gif و jpg نگیرم نه فایل متنی نه فایل ویدئویی یا ...
حال من اومدم از کنترل اعتبارسنجی خود asp اما جواب نداد حال اینکه امکان داره روشی باشه که دورش زد
حال ایا میشه هر فایلی که کاربر ارسال میکنه قبل از ذخیره سازی به عکس تبدیلش کرد بعد ذخیرش کرد؟
مثل تبدیل متن به عکس اما میخوام قبل از ذخیره سازی این تبدیل انجام بشه

mohsen.nsb44
دوشنبه 14 فروردین 1391, 18:43 عصر
یه سوال دیگه برام پیش اومده فایل mp3 رو نمیشه که به عکس تبدیل کرد در این حالت چه اتفاقی میوفته؟

dorparasti
دوشنبه 14 فروردین 1391, 19:54 عصر
نه پسوند و نه MimeType راه های مطمئنی برای اعتبارسنجی یک فایل آپلود شده نیستند .
اگر تنها ارسال تصاویر مجاز است همون روش bitmap روش مناسبی است . چون حتی اگر header های فایل دستکاری شده باشند محتوای فایل ، تصویر نیست و موقع فراخوانی تابع خطا اتفاق می افته .

اگر فایل های مختلفی مجاز به آپلود هستند بازهم باید محتوای فایل رو ( File Signature ) بررسی کنید . چون هر نوعی از فایل دارای یک ساختار مشخص (http://www.garykessler.net/library/file_sigs.html) است .

mohsen.nsb44
دوشنبه 14 فروردین 1391, 20:06 عصر
نه پسوند و نه MimeType راه های مطمئنی برای اعتبارسنجی یک فایل آپلود شده نیستند .
اگر تنها ارسال تصاویر مجاز است همون روش bitmap روش مناسبی است . چون حتی اگر header های فایل دستکاری شده باشند محتوای فایل ، تصویر نیست و موقع فراخوانی تابع خطا اتفاق می افته .

اگر فایل های مختلفی مجاز به آپلود هستند بازهم باید محتوای فایل رو ( File Signature ) بررسی کنید . چون هر نوعی از فایل دارای یک ساختار مشخص (http://www.garykessler.net/library/file_sigs.html) است .
دوست عزیز کاربر فقط مجاز به اپلود عکس میباشد شما گفتید bitmap روش مناسبی است اما یه مشکل بزرگی این وسط وجود داره اگه کاربری فایل ویدئویی اپلود کنه چی؟ اینجا که نمیشه به عکس تبدیلش کرد و هکر میتونه خطا تو سایت رخ بده و ...:ناراحت:

dorparasti
دوشنبه 14 فروردین 1391, 20:08 عصر
85100

این کلاسی هست که برای محدود کردن نوع فایل به doc , docx و zip استفاده می کنم .

تابعی است که پسوند فایل و FileContent رو می گیره بعد sign فایل آپلود شده رو با مقدار استاندارد که در کلاس ثبت شده مقایسه می کنه اگر هماهنگ بود مقدار true و در غیر اینصورت مقدار false برمی گردونه .

dorparasti
دوشنبه 14 فروردین 1391, 20:13 عصر
اگه کاربری فایل ویدئویی اپلود کنه چی؟ اینجا که نمیشه به عکس تبدیلش کرد و هکر میتونه خطا تو سایت رخ بده


خوب این یک روش بهینه نیست و باید با استفاده از try catch اون رو مدیریت کنید . روش دوم که file signature رو چک می کنه روشی مناسب تره .