PDA

View Full Version : متمایز کردن ویزیتورها



mehrdad201
دوشنبه 23 مهر 1386, 01:33 صبح
سلام

یه سوالی داشتم: فرض کنید شما تصمیم گرفتید که یکی از ویزیتورهای وب سایتتون رو بلاک کنید...

برای این کار چه ویژگیهایی رو در نظر میگیرید. بعضی از وب سایت ها هستند که میان آی پی رو بلاک می کنند. این کار باعث میشه که اگه ویزیتور دیگه ای با یه کامپیوتر دیگه و از تو همون شبکه خواست به سایت شما وصل شه ، بهش اجازه داده نشه.

حالا شما برای اینکه دامنه این محدودیت فقط همون سیستم مورد نظر رو در بر بگیره چه ویژگیهایی رو در نظر میگیرید.

ممنون میشم کمکم کنید.

shahab_ksh
دوشنبه 23 مهر 1386, 09:24 صبح
باید سیتتون رو کاری کنید که از طریق یوسر پسورد وارد سایت شما بشن که بشه شناسایشون کرد یا همون از طریق IP محدود بشن

mehrdad201
دوشنبه 23 مهر 1386, 16:19 عصر
فرض کن یکی بخواد ایمیل شما رو هک کنه

میره تو یاهو آدرس ایمیل شما رو مینویسه و شروع می کنه پسورد ها رو امتحان کردن....

بعد از جند بار آزمون ناموفق یاهو میاد ایمیل رو قفل می کنه

اونوقت اگه قرار باشه خود ایمیل قفل بشه دیگه شما نمیتونی وارد ایمیلت بشی....

پس باید یه کاری کنه که فقط اون کامپیوتر قفل شه ....

حالا این کار رو چطوری انجام میدن ؟!؟!؟!؟ من میخوام این رو بدونم.

SalarSoft
دوشنبه 23 مهر 1386, 17:10 عصر
چند روش هستند که هیچ کدام تماما مشکل رو حل نمی کنند:

1- نیاز به Password برای ورود به سایت ( این روش چند تا راه حل مختلف برای پیاده سازی داره)
2- شناسایی توسط IP (برای dial-up ها کلا بی نتیجه است)
3- استفاده از Cookie که با بستن کوکی میشه دورش زد
4- شناسایی از طریف ISP که با آن وصل میشود - به IP مربوطه (با تعویض ISP دور زده میشه)

5- ترکیبی از روش های بالا ما رو به نتیجه بیشتر نزدیک می کنه.

web developer
دوشنبه 23 مهر 1386, 18:21 عصر
برای این مشکل بهتره از تصاویر امنیتی (http://barnamenevis.org/forum/showthread.php?t=63212) استفاده کنی.

و IP مورد نظر رو تا چندین ساعت بلاک کنی.

موفق باشی

mehrdad201
سه شنبه 24 مهر 1386, 02:05 صبح
راستش بذارید اون چیزی رو که باید انجام بدم واضح بگم شاید اینطوری بتونید راهنماییم کنید.


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

میخوام سیستم طوری باشه که اگه یه یوزر لاگین کرده ، کسی نتونه با همون یوزر از یه بروزر دیگه یا با یه آی پی و کامپیوتر دیگه لاگین کنه

در ضمن اگر این یوزری که الان لاگین کرده به هر دلیلی بروزرش بسته بشه و از سایت بیفته بیرون و بخواد که دوباره لاگین کنه ، سیستم بهش اجازه بده و بهش نگه که الان این یوزر آنلاینه (چونکه در حقیقت خودش آنلاین بوده)

نمیدونم تونستم واضح بگم یا نه

mahdi_negahi
سه شنبه 24 مهر 1386, 08:00 صبح
من یه سیستم لاگین دارم روی وب سایتم. از کنترل های لاگین مایکروسافت هم استفاده کردم.

میخوام سیستم طوری باشه که اگه یه یوزر لاگین کرده ، کسی نتونه با همون یوزر از یه بروزر دیگه یا با یه آی پی و کامپیوتر دیگه لاگین کنه



مگه الان این قابلیت ها رو نداری ؟


در ضمن اگر این یوزری که الان لاگین کرده به هر دلیلی بروزرش بسته بشه و از سایت بیفته بیرون و بخواد که دوباره لاگین کنه ، سیستم بهش اجازه بده و بهش نگه که الان این یوزر آنلاینه (چونکه در حقیقت خودش آنلاین بوده)

این همان گزینه من را به خاطر بسپار است

mehrdad201
سه شنبه 24 مهر 1386, 13:37 عصر
راستیتش من آشنایی کاملی با این کنترل ندارم. اما ازش استفاده کردم.

من که امتحانش کردم وقتی با یه یوزر نیم لاگین می کنی ، میتونی از یه بروزر دیگه هم لاگین کنی که من نمیخوام این اتفاق بیفته

شما اگه میدونی چطوری میشه این کار رو انجام داد لطفا من رو راهنمایی کنید.

mehrdad201
چهارشنبه 25 مهر 1386, 11:05 صبح
دوستان عزیز کسی نیست دست ما رو بگیره ؟!؟!؟!؟!؟!؟

SalarSoft
چهارشنبه 25 مهر 1386, 18:20 عصر
باید از رویداد Authenticate کنترل استفاده کنی:

اگر کاربر به سایت وارد شد ورود اون در Application ثبت میشه و خروج اون هم در رویداد session_end ثبت میشه. (رویداد Authenticate کنترل Login)
پس تا زمانی که کاربر در سایت است کس دیگه ای نموتونه با همان نام وارد سایت بشه.


protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
if (Login1.UserName == "admin" && Login1.Password == "1")
{
if (Convert.ToBoolean(Application[Login1.UserName]) == false)
{
Application.Lock();
try
{
Application[Login1.UserName] = true;
}
finally
{
Application.UnLock();
}
e.Authenticated = true;
}
else
e.Authenticated = false;
}
else
{
e.Authenticated = false;
Session[Login1.UserName] = true;
}
}
</script>


void Session_End(object sender, EventArgs e)
{
Application.Lock();
try
{
Application[Request.LogonUserIdentity.Name] = false;
}
finally
{
Application.UnLock();
}
}



همین کار رو می تونی به جای شی Application در database انجام بدی و فیلد وضعیت کاربر رو تغییر بدی.

mehrdad201
پنج شنبه 26 مهر 1386, 11:27 صبح
یه سوال

شما وقتی session end فراخوانی میشه متغیر application رو از بین میبرید !؟!؟!؟!؟

میدونم که مزیت استفاده از application ها در مقایسه با دیتابیس سرعا بیشتر هست اما
آیا این کار (منظورم استفاده از متغیرهای اپلیکیشنه) به سرور فشار وارد نمی کنه ؟!؟!

در ضمن دستورات lock و unlock دقیقا کارشون چیه !؟؟!؟ لطفا توضیح بدید برام.

mehrdad201
پنج شنبه 26 مهر 1386, 11:46 صبح
راستی یه چیز دیگه هم میخواستم بپرسم

ابجکتی که از نوع MembershipUser ایجاد میشه یه پراپرتی داره به اسم IsOnline

آیا میشه از این ویژگی استفاده کرد ؟!؟!؟!؟!؟

SalarSoft
پنج شنبه 26 مهر 1386, 17:21 عصر
آیا این کار (منظورم استفاده از متغیرهای اپلیکیشنه) به سرور فشار وارد نمی کنه ؟!؟!
تنها چیزی که شی application مصرف میکنه رم است. که با توجه به اینکه چیز خاصی ذخیره نمی کنیم، تاثیری نخواهد داشت.

برای اطمینان بیشتر این کد رو جایگزین کنید:


void Session_End(object sender, EventArgs e)
{
Application.Lock();
try
{
Application.Remove(Request.LogonUserIdentity.Name) ;
}
finally
{
Application.UnLock();
}
}




در ضمن دستورات lock و unlock دقیقا کارشون چیه !؟؟!؟ لطفا توضیح بدید برام.
Lock مانع دسترسی سایر درخواست ها به شی Application میشه و unlock برعکس.


ابجکتی که از نوع MembershipUser ایجاد میشه یه پراپرتی داره به اسم IsOnline
بلی. IsOnline بر اساس مقدار LastActivityDate کار می کنه که اون هم در UpdateUser به روز رسانی می شه.

mehrdad201
جمعه 27 مهر 1386, 13:54 عصر
ممنونم

اما یه سوال شما فرمودید


Lock مانع دسترسی سایر درخواست ها به شی Application میشه و unlock برعکس.

اما یه سوال : آیا این مساله در زمانیکه احتمال لاگین کردن 2 کاربر به طور همزمان پیش میاد ، باعث ایجاد مشکل نمیشه. (اینکه شی اپلیکیشن در اون موقع قفل شده باشه)