نمایش نتایج: از شماره 1 تا 2 از مجموع 2
Like Tree5نفر پسندیدند
  • 4 ارسال توسط Mehdi
  • 1 ارسال توسط Codex

موضوع: جلوگيری از دزدیده شدن محتویات وب سایت

  1. #1
    بنیانگذار
    تاریخ عضویت
    2011 May
    محل سکونت
    بابل
    ارسال ها
    45
    تشکر
    275
    تشکر شده 87 بار در 39 پست


    آيا اين پست براي شما سودمند بود؟ بله | خیر

    جلوگيری از دزدیده شدن محتویات وب سایت


    موضوع اين مقاله کلیه فایلهای موجود در سایت از قبیل JPG ،DOC ،PDF... می‌باشد. اگر از فایلهای خود محافظت نکنید به راحتی هر کسی میتواند به آنها دسترسی پیدا کند چون فقط کافیست از URL آن مطلع شود تا به راحتی بتواند آن را دانلود کند و یا با استفاده از یک Spider کل اطلاعات سایت شما را دریافت کند همانطور که مدتهاست گوگل در حال انجام اینکار است و کلیه تصاویر موجود در هر سایت را ذخیره می کند. خوب راه حل جلوگیری از اینکار چیست؟

    --------------------------------------------------------------------------------
    هر نوع اطلاعاتی که بتوان فقط با یک URL به آن دسترسی پیدا کرد دیگر مال همه است و همه میتوانند به آن دسترسی داشته باشند و سایتهایی مثل گوگل در ظرف چند دقیقه کل اطلاعات شما را به این صورت دریافت میکنند.

    بعضی اوقات شما دوست ندارید همه به اطلاعات شما دسترسی داشته باشند و میخواهید فقط به بعضی افراد اجازه دسترسی به بعضی از فایلها را بدهید خوب به نظر شما راه حل چیست؟ اگر فقط یک سیستم مدیریت کاربر بگذارید و کاربران پس از ورود به آن URL خاص دسترسی پیدا کنند خیلی جالب نخواهد بود زیرا فقط کافیست آن آدرس URL لو رود تا مجددا افراد بدون مجوز بتوانند به آن دسترسی پیدا کنند. پس عملا Authentication ساده ASP.net قادر به امن کردن فایلهای شما نیست و شما باید تدابیر دیگری بیاندیشید.

    حتی در مورد این فکر نکنید مثلا اسم فایل را بگذارید 32sdf43ef45.pdf چون این کار ابلهانه‌ای است و در اصل مسئله تفاوتی ایجاد نمی کند. یک Spider و یا یک Hacker خوب میتواند به راحتی به فایلهای شما دسترسی پیدا کند.

    راه حل در استفاده از HttpHandler است.


    مروری بر HttpHandler

    HttpHandler شامل یکسری API هایی جهت انجام امور اشیاء Request/Response که با استفاده از آن میتوانید انتقال اطلاعات را کنترل کنید. در اینجا ما باید یک Handler ایجاد کنید که در زمانی که کسی درخواست یک فایل مثلا doc. میدهد اجرا شود.

    خوب بهتر است مقداری کد نویسی کنیم تا بهتر موضوع مشخص شود و متوجه شوید چطور میتوان در یک سایت E-Commerce اطلاعات را امن کرد بدون استفاده از تکنیک های FTP و نیاز به مرورگرهای خاص.


    تغییر Web.Config

    مرحله اول: باید تگ زیر را در web.config موجود در فولدری که میخواهید آن را Secure کنید وارد کنید.

    کد:
    <HttpHandlers> <add verb="*" path="*.doc" type="pdfIntercept.pdfHandler, pdfInterceptX" /> </HttpHandlers>
    با اینکار در واقع به IHttpHandler میگوئیم که ما میخواهیم درخواستهایی که آخر آنها doc است را کنترل کنیم.

    مشخصه verb میتواند حالتهای POST یا GET یا HEAD داشته باشد که در اینجا ما نوشته ایم * یعنی تمامی حالتهای تقاضا را مورد پوشش قرار می دهد.

    مشخصه Path در واقع آدرسی که باید مورد بررسی قرار گیرد که با نوشتن doc.* گفته ایم کلیه آدرس های منتهی به doc

    مشخصه Type در واقع کلاس دات نت است که باید تقاضا را Handle کند. باید نام کامل کلاس را به صورت زیر بنویسیم.


    [NAMESPACE].[CLASS], [ASSEMBLY NAME]


    اضافه کردن یک پسوند دلخواه Custom Extension

    باید توجه کرد که باید پسوند مورد نیاز را در IIS هم اضافه کنیم. درضمن سپس تنظیمات دایراکتوری محتوی فایلها را به صورت زیر انجام دهید:


    Read : False
    Write: False
    Directory Browsing: False

    حال IIS Manager را اجرا کنید و سپس Properties/Edit… را انتخاب کنید آنگاه به بخش Home بروید و دکمه Configuration را بزنید. سپس باید پسوند مورد نیاز خود مثلا doc, pdf را در صفحه تنظیمات نرم افزار اضافه کنید. برروی دکمه add بزنید و اطلاعات مورد نیاز را پر کنید کار بسیار ساده ای است.

    بعد از اینکه اینکارها را کرده اید حال آماده هستید تا کد مربوط به HttpHandler را بنویسید.


    کد HttpHandler

    در زیر کد مربوط به HttpHandler ارائه شده است. البته شما خود باید کد مربوط به Authentication مربوط به سایت خود را در آن قرار دهید.


    کد:
    using System; using System.Web; using System.IO; namespace pdfIntercept { public class pdfHandler : IHttpHandler { //Notice ProcessRequest is the only method //exposed by the IHttpHandler public void ProcessRequest(HttpContext context) { try { string strString = "yes"; HttpRequest oRequest = context.Request; HttpResponse oResponse = context.Response; //ADD YOUR CUSTOM AUTHENICATION HERE //ADD YOUR CUSTOM AUTHENICATION HERE //ADD YOUR CUSTOM AUTHENICATION HERE //ADD YOUR CUSTOM AUTHENICATION HERE if (strString == "yes") { //Since they've made it this far, they've been validated //by your system… //We'll fire up a FileStream object FileStream MyFileStream; long FileSize; //Map the path to the .doc file //You might need to parse out the Request path to figure out //what resource they're actually requesting… string strMapPath = context.Server.MapPath("book1.doc"); MyFileStream = new FileStream(strMapPath, FileMode.Open); FileSize = MyFileStream.Length; //Allocate size for our buffer array byte[] Buffer = new byte[(int)FileSize]; MyFileStream.Read(Buffer, 0, (int)FileSize); MyFileStream.Close(); //Do buffer cleanup context.Response.Buffer = true; context.Response.Clear(); //Add the appropriate headers context.Response.AddHeader("content-disposition", "attachement filename=x.doc"); //Add the right contenttype context.Response.ContentType = "application/doc"; //Stream it out via a Binary Write context.Response.BinaryWrite(Buffer); } else { //It's a bogus request and they weren't validated. context.Response.Write("<b>DENIED</b>"); } } catch (System.Exception err) { err.ToString(); } } //By calling IsReusable, an HTTP factory can query a handler to //determine whether the same instance can be used to service //multiple requests public bool IsReusable { get { return false; } } } }
    اگر میخواهید پیچیدگی مربوط به binary stream را کم کنید میتوانید از متد Response.WriteFile به صورت زیر استفاده کنید.


    کد:
    if (strString == "yes") { context.Response.Buffer = true; context.Response.Clear(); context.Response.AddHeader("content-disposition", "attachement; filename=x.doc"); context.Response.ContentType = "application/doc"; context.Response.WriteFile("pp.doc"); } else { context.Response.Write("<b>DENIED</b>"); }
    مراحل کد ارائه شده به صورت زیر است:
    1. HttpHandler درخواست مربوط به یک فایل doc را دریافت میکند.
    2. سپس شما یکسری چک کردن با دیتابیس برای اینکه متوجه شوید کاربر مجاز به استفاده است انجام میدهید.
    3. اگر درخواست مجاز بود یک Binary Stream فایل را برای کاربر ارسال میکند.
    4. اگر درخواست غیر مجاز بود برروی صفحه نوشته میشود Denied

    HttpHandler یک ابزار بسیار قوی جهت کنترل دسترسی به محتویات موجود برروی وب سایت شما است.

    از این روش میتوان در سایتهای E-Commerce و در جاهایی که لازم دسترسی به یک یا چند فایل محدود شود استفاده نمود. با این روش دیگر هیچ URL در کار نخواهد بود که کسی بتواند با منتشر کردن آن اطلاعات شما را بردارد.







    موضوعات مشابه:
    Hossein, soroush, Codex و 1 نفر دیگر این نویسه را می پسندند.

  2. #2
    کاربر عادی
    تاریخ عضویت
    2011 May
    محل سکونت
    تهران
    ارسال ها
    316
    تشکر
    37
    تشکر شده 688 بار در 303 پست
    نوشته های وبلاگ
    39


    آيا اين پست براي شما سودمند بود؟ بله | خیر
    سلام
    همه جای قضیه خوبه جز 1 مورد :

    3. اگر درخواست مجاز بود یک Binary Stream فایل را برای کاربر ارسال میکند.
    این قسمت باعث بار اضافی روی سرور میشه ، به سرور فشار میاره و توبازدید های بالا اگر cpu مناسب نباشه حتی ممکنه سرور کم بیاره

    موفق باشید

    Hossein این نویسه را میپسندد.
    http://payline.ir

    http://flynet.ir

    the poor people are often the most generous

 

 

کاربران برچسب خورده در این موضوع

علاقه مندی ها (Bookmarks)

علاقه مندی ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •  


Powered by vBulletin
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.6.0
Persian Language By Ustmb.ir
این انجمن کاملا مستقل بوده و هیچ ارتباطی با دانشگاه علوم و فنون مازندران و مسئولان آن ندارد..این انجمن و تمامی محتوای تولید شده در آن توسط دانشجویان فعلی و فارغ التحصیل ادوار گذشته این دانشگاه برای استفاده دانشجویان جدید این دانشگاه و جامعه دانشگاهی کشور فراهم شده است.لطفا برای اطلاعات بیشتر در رابطه با ماهیت انجمن با مدیریت انجمن ارتباط برقرار کنید
ساعت 01:34 PM بر حسب GMT +4 می باشد.