PDA

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



shahab_ksh
پنج شنبه 20 فروردین 1388, 00:29 صبح
با سلام

سایتی دارم که از دیروز تا به حال 15 گیگابایت ترافیک داشته در حالی که در کل 400 نفر بازدید داشته

اول فکر کردم دچار یک حمله DDOS شدم با مدیر سرور تماس گرفتم گفت هیچ حمله DDOS در کار نیست و ممکنه فایلی رو برای دانلود در هاست گذاشته باشید

من دیروز یه فایل 12 مگابایتی رو در هاست قرار دادم حال نمی دونم مشکل از کجاست ؟

فکر کردم شاید یه روبات نرم افزازی با اینترنت پرسرعت داره پشت سر هم این فایل رو دانلود میکنه بعد به فکر استفاده از کد امنیتی در سایت برای دانلود افتادم

ولی اگه یه روبات میتونه این فایل رو دانلود کنه خوب بجای یه فایل غیر ppt میشه رو دانلود یه عکس از سایت تنظیمش کرد که کلا دیگه نمیشه با کد امنیتی هم جلوش رو گرفت

حالا آیا چنین مشکلی براتون پیش اومده و چه راه حلی به نظرتون میرسه؟

daffy_duck376
پنج شنبه 20 فروردین 1388, 07:04 صبح
احتمالا قایل های سایت شما رو ( عکسها ، فایهای قابل دانلود و ....) تو سایتهای دیگه توسط لینک سایت شما واسه دانلود گذاشتن . مثلا مطالب سایت شما رو نوشتن و سپس به جای UPLOAD مطالب یا عکس به سایت خودشون از لینک عکسهای سایت شما استفاده کردن . مثل اینکه شما یه فایلی رو 4ُSHARED آپلود میکنید لینکشو رو سایت خودتون میدید وقتی کاربر اونو دانلود میکنه از ترافیک 4shared استفاده میکنه!
من یه مقاله راجع این قضیه دارم که اینجا واست میگذارم :
-------------------------------------------------------------------------------------------------------
موضوع اين مقاله کلیه فایلهای موجود در سایت از قبیل 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 در کار نخواهد بود که کسی بتواند با منتشر کردن آن اطلاعات شما را بردارد.


منبع :IranASP.net

KavoshGar_ir
پنج شنبه 20 فروردین 1388, 09:18 صبح
با سلام

سایتی دارم که از دیروز تا به حال 15 گیگابایت ترافیک داشته در حالی که در کل 400 نفر بازدید داشته

اول فکر کردم دچار یک حمله DDOS شدم با مدیر سرور تماس گرفتم گفت هیچ حمله DDOS در کار نیست و ممکنه فایلی رو برای دانلود در هاست گذاشته باشید

من دیروز یه فایل 12 مگابایتی رو در هاست قرار دادم حال نمی دونم مشکل از کجاست ؟

فکر کردم شاید یه روبات نرم افزازی با اینترنت پرسرعت داره پشت سر هم این فایل رو دانلود میکنه بعد به فکر استفاده از کد امنیتی در سایت برای دانلود افتادم

ولی اگه یه روبات میتونه این فایل رو دانلود کنه خوب بجای یه فایل غیر ppt میشه رو دانلود یه عکس از سایت تنظیمش کرد که کلا دیگه نمیشه با کد امنیتی هم جلوش رو گرفت

حالا آیا چنین مشکلی براتون پیش اومده و چه راه حلی به نظرتون میرسه؟
علاوه بر اطلاعاتی که دوستمان گفتند استفاده از فایل robots.txt هم پاسخگوی Search Engine هاست که دسترسی به فولدرهای حیاتی نظیر فولدر فایلها را می بنده!

این فایل را باید در روت قرار بدی و با فرمت زیر:


User-agent: Mediapartners-Google*
Disallow:

User-agent: *
Disallow: /images/
Disallow: /Uploads/