SalarSoftwares logo

خوش آمدید. در این سایت می توانید ابزارهای دلفی و نرم افزارها را دریافت کنید.

صفحه اصلی | مقالات | سوال و جواب | Downloads | Beeper help | جستجو | تصاویر برنامه ها | تبلیغات | تماس با ما | وبلاگ شخصی

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

هر نوع اطلاعاتي که بتوان فقط با يک 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 در کار نخواهد بود که کسي بتواند با منتشر کردن آن اطلاعات شما را بردارد.

منبع: www.iranasp.net
نویسنده:Amin Roudaky
 

Titles

صفحه اصلی
Up
سوال و جواب
Downloads
Beeper help
جستجو
تصاویر برنامه ها
تبلیغات
تماس با ما
وبلاگ شخصی

جستجو در سایت

لینک سایر سایت ها


 صفحه اصلی | مقالات | سوال و جواب | Downloads | Beeper help | جستجو | تصاویر برنامه ها | تبلیغات | تماس با ما | وبلاگ شخصی
در صورت بروز هر گونه مشكل در استفاده از نرم افزار هاي اين سايت, مشكل را با مدير اين سايت در ميان بگذاريد.

Creative Commons License
This work is licensed under a Creative Commons Attribution 2.5 License.

آخرين به روز رسانی: آمار بازدید: