PDA

View Full Version : سوال: جلوگیری از دزدیده شدن فایل های سایت



fa_karoon
چهارشنبه 05 اسفند 1388, 20:52 عصر
اگر کاربر غیر مجازی آدرس Url مثلا Pdf ی را در نوار آدرس وارد کرد می تواند محتوای PDF را مشاهده کند چگونه می توان مانع دسترسی این کاربران غیرمجاز شد.
توجه داشته باشید ممکن است نقش کاربر از نوع عادی باشد ولی اگر کاربر آدرس فایل را فهمید(آدرس لو رفت) می توان با روشی که گفتم به آن دسترسی داشته باشد.
در جایی خواندم که از HttpHandler استفاده می شود اما نفهمیدم چگونه

Behrouz_Rad
چهارشنبه 05 اسفند 1388, 22:05 عصر
یک راه اینه که پسوند فایل رو عوض کنی و برابر با یکی از پسوندهایی بگذاری که IIS بررسی می کنه. مثلا بگذار ascx! در این حالت می تونه برای فایل ها که در پوشه ای خاص هستند، سطح دسترسی در Web.Config تعریف کنی. حال با Stream فایل رو به کلاینت منتقل و از طریق هدر content-disposition و خاصیت filename اش، نام و پسوند واقعی فایل رو تنظیم کن.

موفق باشید.

Saber_Fatholahi
جمعه 07 اسفند 1388, 10:53 صبح
یه راه سادن تر اینه که تمام فایلهای دانلودی بذاری توی یه پوشه و دسترسی به اون پوشه محدود کنی از طریق وب کانفیگ
موفق باشی

shocraneh
جمعه 07 اسفند 1388, 11:21 صبح
یه راه سادن تر اینه که تمام فایلهای دانلودی بذاری توی یه پوشه و دسترسی به اون پوشه محدود کنی از طریق وب کانفیگ
موفق باشی
چه طوری از طریق وب کانفیگ دسترسی به اون پوشه رو محدود کنی؟؟
اصل کدوم روش امن تره اولی یا دومی ؟؟
در ضمن یه گزینه فولدر های رمز دار روی کنترل پنل دیدم ، من فکر کردم میشه از اونا استفاده کرد . البته هنوز بهش فکر نکردم ..... ممنون

Saber_Fatholahi
شنبه 08 اسفند 1388, 09:09 صبح
نه دوست من نیاز به کد نویسی و غیره نداره
فقط کافیه این فایل هارو بذاری توی شاخه مورد نظر بعد از طریق Asp.Net Configuration دسترسی به اون پوشه محدود کنی
مثلا بگی فقط اعضای نقش x به اون دسترسی داشته باشن
در حالت عادی شما برای دسترسی به مدیریت سایت چکار می کنید؟
دقیقا همین کار برای این شاخه انجام بدین
امنیتشم خوبه مطمئن باش
چون اگه امنیت نداشت خود میکروسافت توی دات نت واسه مدیریت صفحات این کار نمی کرد

یه فایل وب کانفیگ باید بذاری توی پوشه مورد نظر و
چیزی شبیه اینارو بنویسی


<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authorization>
<deny users="?" />
<allow roles="Administrators" />
<deny users="*" />
</authorization>
</system.web>
</configuration>

shocraneh
یک شنبه 09 اسفند 1388, 08:18 صبح
با تشکر از دوستان
من روی یکی از پوشه هام webconfig گذاشتم اما همچنان در نوار آدرس که مسیر یکی از فایل ها رو می زنم فایل رو باز می کنه ؟؟البته منطقی هم به نظر نمی رسه که این کدها بتونن جلو این کارو بگیرن .میشه توضیح بدین . شاید یه کار دیگه هم باید انجام داد؟

یه سوال دیگه :حالا این روش که درست شد ،من فایل های اون پوشه رو باید به کاربران معمولی نشون بدم (منظورم روی صفحات وب )آیا اونجا نباید کد خاصی رو استفاده کنم؟
شرمنده سوالام زیاد شد . پیشاپیش ممنون

maxpayn2
یک شنبه 09 اسفند 1388, 08:40 صبح
حال با Stream فایل رو به کلاینت منتقل و از طریق هدر content-disposition و خاصیت filename اش، نام و پسوند واقعی فایل رو تنظیم کن.

موفق باشید.


میشه برای این تیکه با کد مثال بزنید ؟

fa_karoon
یک شنبه 09 اسفند 1388, 22:41 عصر
یه فایل وب کانفیگ باید بذاری توی پوشه مورد نظر و
چیزی شبیه اینارو بنویسی


<?xml version="1.0" encoding="utf-8"?>




<configuration>

<system.web>
<authorization>
<deny users="?" />
<allow roles="Administrators" />
<deny users="*" />
</authorization>
</system.web>

</configuration>
[/quote]



من تو سایتم از امکانات WAT مربوط به ویژوال استودیو استفاده نکردم و خودم در فیلدی به نام Role اشخاصی را که ثبت نام می کنند بر اساس معیارهایی در آن فیلد کلمه User یا User1 قرار می دهم کاربر مدیر هم با نقش Admin ذخیره هست و یک مدیر بیشتر ندارم حال آیا من می توانم باز هم از این کدها استفاده کنم
ببخشید که سوالم داستان شد:خجالت:

bachebahal_1363
یک شنبه 09 اسفند 1388, 23:23 عصر
خوب بهترین کار این هست که فولدر Upload رو که قراره فایل ها درون اون قرار بگیرن در خارج از VirtualDir سایت قرار بدین و با استفاده از یک فولدر Cache فایل های درخواستی مورد نظر رو در سمت سرور پردازش کرده اون فایل رو از فولدر Upload کپی کرده در فولدر Cache و سپس به کاربر نمایش بدین.

iman_ad
یک شنبه 09 اسفند 1388, 23:31 عصر
از آقای راد واقعا ممنونم اگه ایشون یک زمانی جایی کلاسی بگذارند حتما جزو اولین شاگرداشون می شم.
راه حل آقای راد بهترین راه حل
البته در 7 IIS گویا می شه از طریق webconfig تنظیمات application mapping انجام داد

Peyman.Gh
یک شنبه 09 اسفند 1388, 23:37 عصر
من تغییر پسوند را امتحان کردم برای فایل متنی بدون انجام آن کاری که آقای راد گفتند با System.IO خونده شد.
ایده جالبی بود !

Behrouz_Rad
یک شنبه 09 اسفند 1388, 23:48 عصر
من تغییر پسوند را امتحان کردم برای فایل متنی بدون انجام آن کاری که آقای راد گفتند با System.IO خونده شد.
ایده جالبی بود !
من متوجه این جمله ی شما نشدم. System.IO چه ارتباطی با جلوگیری از دزدیده شدن فایل ها داره؟
چه چیزی ایده ی جالبی بود؟

Peyman.Gh
یک شنبه 09 اسفند 1388, 23:52 عصر
اشتباه شد ! من پست شما را خوب نخوندم منظورم این بود که به طور مثال یک فایل متنیTXT پسوندشو کردم
Ascx و در صفحه فایل متنی رو خوندم ! همین


اگر شخص آدرس فایل متنی رو مثلاً با همنون پسوند ascx در url بزند نمیتونه به محتویات فایل متنی دسترسی داشته باشه ! درسته ؟!

Behrouz_Rad
دوشنبه 10 اسفند 1388, 07:34 صبح
اگر شخص آدرس فایل متنی رو مثلاً با همنون پسوند ascx در url بزند نمیتونه به محتویات فایل متنی دسترسی داشته باشه ! درسته ؟!

بله درسته.

maxpayn2
دوشنبه 10 اسفند 1388, 08:10 صبح
آقای راد من هم تو صفحه اول تاپیک یه سوال از پست شما پرسیدم ، لطفا جواب بدید

Behrouz_Rad
دوشنبه 10 اسفند 1388, 21:42 عصر
میشه برای این تیکه با کد مثال بزنید ؟


Response.ContentType = "image/jpeg";

Response.AppendHeader("Content-Disposition", "attachment; filename=zizigooloo.jpg");

Response.TransmitFile(Server.MapPath("~/images/googooli.resources"));

Response.End();

ملاحظه می کنی که اسم اصلی فایل که در حقیقت یک عکس هست، googooli.resources است اما ما اسم فایل رو در هنگامی که به سیستم کاربر ارسال می کنیم به zizigooloo.jpg تغییر دادیم.

موفق باشید.

fa_karoon
سه شنبه 11 اسفند 1388, 00:46 صبح
دستم درد نکنه مشکل همه حل شد به جز خودم
اینکه آقای راد گفتن : می تونه برای فایل ها که در پوشه ای خاص هستند، سطح دسترسی در Web.Config تعریف کنی. یعنی چه طوری یه مقدار توضیح و کد بیشتر می خوام لطفا
باز هم تاکید میکنم من تو سایتم از امکانات WAT مربوط به ویژوال استودیو استفاده نکردم و خودم در فیلدی به نام Role اشخاصی را که ثبت نام می کنند بر اساس معیارهایی در آن فیلد کلمه User یا User1 قرار می دهم کاربر مدیر هم با نقش Admin ذخیره هست و یک مدیر بیشتر ندارم حالا چه طوری تو web.config سطح دسترسی درست کنم.
(یه راه دیگه هم توی این سایت توضیح داده اگر اساتید سردرآوردن ما رو هم لطفا راهنمایی کنن:
http://itknowledge.mihanblog.com/post/729
این رو هم در نظر بگیرید که من از ویژوال استودیو و سیستم فایل استفاده می کنم نه IIS )
لطفا یه جوری حرف بزنید من بفهمم:ناراحت:

shocraneh
سه شنبه 11 اسفند 1388, 09:03 صبح
Response.ContentType = "image/jpeg";

Response.AppendHeader("Content-Disposition", "attachment; filename=zizigooloo.jpg");

Response.TransmitFile(Server.MapPath("~/images/googooli.resources"));

Response.End();
ملاحظه می کنی که اسم اصلی فایل که در حقیقت یک عکس هست، googooli.resources است اما ما اسم فایل رو در هنگامی که به سیستم کاربر ارسال می کنیم به zizigooloo.jpg تغییر دادیم.

موفق باشید.
منم دقیقا نفهمیدم .کاربر ما فایلی رو آپ می کنه که ممکنه پسوندش هر چیزی باشه ،حالا ما میایم تغییر پسوند می دیم و ذخیرش می کنیم . حالا می خایم فایلو به کاربر نشون بدیم ،مگه نباید پسوند اولیه رو برگردونیم ؟؟ حالا از کجا بدونیم پسوند اولیه چیه؟؟

جدای از اینها من در وب کنفیک سطح دسترسی رو تایین می کنم ولی بازم روی url باز می کنه . البته می دونم شیوه همینه اما .....:عصبانی:

Peyman.Gh
سه شنبه 11 اسفند 1388, 11:44 صبح
ایده تغییر نام خیلی خوب بود اگر بخواهید این فایل را برای کاربران بفرستید که از همین کدی که آقای راد گذاشتن استفاده کنید اگر فقط میخواهید در صفحه نشان دهید همون تغییر نام کافیه

Behrouz_Rad
سه شنبه 11 اسفند 1388, 13:15 عصر
کاربر ما فایلی رو آپ می کنه که ممکنه پسوندش هر چیزی باشه ،حالا ما میایم تغییر پسوند می دیم و ذخیرش می کنیم . حالا می خایم فایلو به کاربر نشون بدیم ،مگه نباید پسوند اولیه رو برگردونیم ؟؟ حالا از کجا بدونیم پسوند اولیه چیه؟؟

کمی خلاقیت به خرج بده دوست من :)
پسوند فایل رو می تونی مثلا به شکل ذیل معرفی کنی:


myFileName_pdf.resources

و زمانی که نیاز بود فایل رو به کلاینت ارسال کنی، به جای resources، عبارت pdf رو قرار بده.

موفق باشید.

fa_karoon
چهارشنبه 12 اسفند 1388, 00:43 صبح
تو رو خدا یکی یه کم بهتر راهنمایی کنه به شکل مبتدی یه فایل هم ضمیمه می کنم

saghari
چهارشنبه 12 اسفند 1388, 03:23 صبح
من هم دقیقا از روشی که آقای راد فرمودند استفاده میکنم.
ضمنا شما نیاز نیست پسوند فایل رو تغییر بدید بلکه کافیه یه پسوند به اون اضافه کنید و در موقعی که میخواهید به شمت کاربر ارسال کنید اون پسوند رو حذف کنید.
مثلا اسم فایل شما اصلی هست example.png
شما فایل رو بصورت example.png.resources ذخیره کنید.
و در موقعی که میخواهید به سمت کاربر بفرستید .resources رو از آخرش حذف کنید.
در واقع شما یک پسوند ثابت رو به فایل اضافه و حذف میکنی که خیلی ساده هست.

ضمنا مطلب ضمیمه شده را همه مطالعه کردم.
به روش شرح داده شده هم میتونید عمل کنید اما همونطور که مشخص است معایب زیر رو در مقایسه با روشی که آقای راد فرمودند داره:
- در روش مقاله شما میبایست از قبل نوع فایلی رو که قراره از سرور خونده شده بدونید (منظورم پسوند فایل) خوب حالا فرض کنید در برنامه شما قراره یه سری کاربر تصاویری رو که پسوند اونها هرچیزی ممکنه باشه (png-gif-jpdو ...) رو اضافه کنن و بعد از اونها استفاده بشه. خوب اگه شما بخواهید از روش مقالتون استفاده کنید باید همه انواع پسوند های احتمالی رو حدس بزنید و در بهترین حالت مجبور میشید کاربرای خودتون رو به یکسری پسوند مشخص محدود کنید.
- در روش مقاله شما میباست یکسری تغییرات رو در IIS سرور انجام بدید و چون معمولا سرور در اختیار شما نیست دردسر راضی کردن شرکتی رو که سایتتون رو سروش هست رو برای اعمال تغییرات در iis دارید. خصوصا در ایران که خدمات عالی ارائه میشه!
- میزان کد نویسی شما خیلی زیادتر از روشی که آقای راد فرموند ولی نتیجه کار و سطح امنیت ایجاد شده یکی هست

موفق باشی

fa_karoon
چهارشنبه 12 اسفند 1388, 22:25 عصر
ابتدا از از آقا Saghari تشکر می کنم بابت راهنمایی خوبشون بعد اینکه من کدهای گفته شده آقای راد رو تو وب کانفیگ نوشتم اما هیچ اتفاقی نیفتاد یه کم گیج شده ام نمی دونم دقیقا باید چی کار کنم و از کجا شروع کنم

bachebahal_1363
چهارشنبه 12 اسفند 1388, 23:40 عصر
اگر می خواهید پوشه ای رو سطح دسترسی بدهید که فقط کاربرانی که login کردند به اون دسترسی داشته باشند هم در web.config اصلی برنامه با اضافه کردن autorization های مختلف برای location های مختلف می شه این کار رو کرد هم داخل هر پوشه ای که می خواین web.config رو اضافه کنید و autorization اون رو برابر deny user=? قرار بدهید

البته بازم می گم بهترین روش اینکه شما برای فایلهاتون دسترسی بزارین این هست که پوشه Upload رو خارج از Virtual Directory قرار بدهید سپس فایل هایی که کاربر ارسالمی کنه رو داخل پوشه Upload به حالت zip شده و با پسورد قرار بدهید با یک نام Unique و بعد برای دریافت اون فایل رو از حالت zip شده خارج کنید و در یک پوشه Chache قرار داده و سپس به کاربر ارسال نمائید.