PDA

View Full Version : ساخت session دستی



hmm
دوشنبه 12 مرداد 1383, 13:23 عصر
با سلام
من جدیدا با asp برنامه رو نوشتم که برای کنترل مجوز کاربران وقتی کاربر رمز رو صحیح وارد میکنه یک session میسازه و مقدار اونرو true میکنه و در تمام صفحات دیگه من چک کردم اگه اون session مقدارش true بود صفحه رو بازکن (برای امنیت بیشتر) حالا مشکل من اینه که جدیدا یک کاربری اومده و این برنامه رو هک میکنه خیلی هم ادعاش میشه نامرد

و روش هک رو کامل نمیگه ولی با کلی گریه و التماس فقط گفت که من دستی روی دستگاه خودم اون session رو ست میکنم و با این روش میتونم بدون رمز به تمام صفحات دسترسی داشته باشم سوال من اینه که آیا صحبت او درسته و میشه همچین کاری رو کرد و چگونه و آیا راه حلی برای این مشکل وجود داره یا خیر
ممنون

MSYNK
دوشنبه 12 مرداد 1383, 15:07 عصر
با سلام
من به طور کامل منظور هکر نامرد! رو متوجع! نشدم.
ولی شاید بهتره روشت رو عوض کنی(چون استفاده از سشن! اصلا بدرد امنیت ممنیت نمیخوره!!!)
بهترین روش استفاده از تعیین اعتبار خود دات نت هستش(ASP.NET Authentication) و تعیین سطح مجوز(ASP.NET Authorization) که در حالت پیشرفتش تبدیل میشه به (Role Based Authorization) یا همون امنیت بر پایه نقش کاربران هستش...
نظرت چیه؟

(تبصره: شاید به خاطر کلاس گذاشتنم بعضی از واژه ها رو اشتباه تایپیده باشم! که پیشاپیش معذرت میخوام.)
با تشکر.

Farhad.B.S
دوشنبه 12 مرداد 1383, 22:50 عصر
1.سیستم اتنتیکیشین خود ای اس پی دات نت هم (در Forms Authentication ) از سشن ها استفاده میکنه.

2.به طور کلی , هر سشن در یک سیستم برای هر درخواست (بازدید کننده) و هر وب اپلیکیشن یکتا هستش.
بنابراین امکان تغییر یک سشن از طریق یک وب اپلیکیشن دیگه یا چیزی شبیه به این وجود نداره (بنابراین تنها راه تغییر محتویات یک سشن, انجام یک عملکرد در سطوح پایین و تغییر قسمت هایی از حافظه ماشین اجرا کننده وب اپلیکیشن است) نتیجه اینکه زمانی که این برنامه بر روی یک وب سرور اجرا میشه هیچ درخواست کننده ای قادر به تغییر محتویات یک سشن نخواهد بود.
احتمالا ضعف در قسمت دیگه ای از سیستم تایین هویت شما وجود داره ...

hmm
سه شنبه 13 مرداد 1383, 07:47 صبح
فکر کنم sesseion در خود کلاینت نگهداری میشه
ولی مطمئنم که اون هکر نامرد مقدار session رو عوض میکنه وگرنه راهی برای دور زدن اون صفحه نیست چون در ابتدای صفحه مقدار session رو چک کردم
در ضمن من با asp نوشتم نه با asp.net

MSYNK
سه شنبه 13 مرداد 1383, 09:02 صبح
با سلام


سیستم اتنتیکیشین خود ای اس پی دات نت هم (در Forms Authentication ) از سشن ها استفاده میکنه


البته بنده فکر میکنم(در واقع اطمینان دارم) که سیستم ASP.NET Authentication از کوکی استفاده میکنه!!! نه از سشن های درپیت :P
و اگر اجازه استفاده از کوکی در Browser کاربر داده نشده باشه فکر کنم به مشکل برخورد بکنه(البته شاید هم این کار در این حالت سمت سرور انجام بشه!)

خوب بگذریم...
میشه توضیح بدین که خود شما چطوری و پس از چه کارهایی اون سشن رو پر میکنین؟
(بنده فکر میکنم)احتمالا طرف از SQL Injection استفاده کرده!!!!

Farhad.B.S
سه شنبه 13 مرداد 1383, 11:37 صبح
1.خیر ، سشن ها در سمت سرور (در حافظه ماشین سرور) ذخیره میشند و این کوکی ها هستند که در سمت کلاینت ذخیره میشند.
2.چیزی به نام Asp.Net Authentication (به عنوان یک روش تایین هویت منفرد ) وجود نداره ، سیستم تعیین هویت ای اس پی دات نت به سه قسمت Windows Authentication ، Forms Authentication و Passport Authentication تقسیم میشه.
چیزی که در اینجا مورد بحثه ، Forms Authentication هستش . این سیستم هم میتونه متکی بر سشن ها و هم متکی بر کوکی ها باشه که انتخاب اول اون سشن هاست .

MSYNK
سه شنبه 13 مرداد 1383, 14:13 عصر
با سلام
میشه بفرمایید که همین تعیین اعتبار کاربر با سشن ها چطوری انجام میشه؟؟؟
چون ما تو تنظیمهای همین Forms Authentication در Web.config بایستی نام کوکی که در کلاینت ساخته میشه رو به همراه زمان موجود بودنش و اینکه امنیت تبادل اطلاعات با اون کوکی چطوری انجام بشه(منظورم قسمت protection هستش) و یه سری تنظیمهای دیگه که همه مربوط به کوکیها میشن رو قرار بدیم!
اینطور نیست؟؟؟
اگه میشه یه راهنمایی بفرمایید.
در ضمن همونطور هم که خودتون گفتین منظور بنده قسمت Forms Authentication از ASP.NET Authentication بوده!البته از اینکه کمی تند رفتم می معذرتم :oops:
با تشکر.

Farhad.B.S
سه شنبه 13 مرداد 1383, 21:13 عصر
سادست ، سیستم پذیرش کوکی را غیر فعال کنید.
حالا تکه کد زیر رو امتحان کنید :


private void btnSignIn_Click(object sender, System.EventArgs e)
{
System.Web.Security.FormsAuthentication.SetAuthCoo kie("username",false);
}

private void Page_Load(object sender, System.EventArgs e)
{
Response.Write(Request.IsAuthenticated);
}

hmm
چهارشنبه 14 مرداد 1383, 07:09 صبح
سلام اساتید
من چجوری بگم که با asp نوشتم حالا شما هی در مورد asp.net بحث کنید
تازه من با استفاده از stode procedure برای تعیین کاربر مجاز استفاده میکنم و sql_injection هم تست کردم
برنامه از این طریق آسیب پذیر نیست
راه حلی وجود نداره؟
پس این بابا چکار میکنه ؟

komeil64
چهارشنبه 14 مرداد 1383, 10:19 صبح
سلام
جناب Farhad.B.Sمیشه آدرس یک مثال از Authentication را بدین
چون من لاگین را با Authentication ننوشتم و از این چیزی که نوشتم زیاد خوشم نیومد
ممنون

Delphi-Clinic
چهارشنبه 14 مرداد 1383, 10:22 صبح
دوست من برو سوالت رو تو بخش ASP مطرح کن.

hmm
چهارشنبه 14 مرداد 1383, 14:02 عصر
این سوال رو اینجا مطرح کردم چون میدونم اساتید asp قدیم در این بخش هستند :oops: :lol:

Spoofed
چهارشنبه 14 مرداد 1383, 15:21 عصر
بحث های اسپوفینگ و غیره :evil2: ... بگذریم!
شما کد قسمت تعیین اعتبار کاربران برای لاگین را اینجا بنویسید لطفا. مشکل مشخص می شود.
(و یا کلا کدی که برای این صفحه ی ذکر شده استفاده می کنید)

hmm
پنج شنبه 15 مرداد 1383, 10:12 صبح
if (Session("Uservaled") = "") then
responce.redirect("err.asp")
end if

kimia1
شنبه 17 مرداد 1383, 12:43 عصر
if (Session("Uservaled") = "") then
responce.redirect("err.asp")
end if

خوب فکر کنم اشتباه کردی
اینجوری اصلاحش کن


If Session("Uservaled") = False or IsNull(Session("Uservaled")) = True then
'Redirect to unathorised user page
Response.Redirect"err.asp"
End If

Spoofed
شنبه 17 مرداد 1383, 13:56 عصر
چه کدی منتهی به مقدار دهی اولیه برای Session می شود؟ آن کد هم مهم است.

hmm
شنبه 17 مرداد 1383, 15:18 عصر
ولی در شرایط عادی درست کار میکنه
کد شما هم زیاد تغییری نداره فقط مقدار null رو چک میکنه که اونهم در برنامه اثری نداره
یعنی اون هکره از این کد نمیتونه به نفع خودش استفاده کنه

faryad_mfa
پنج شنبه 22 مهر 1389, 10:53 صبح
من از این روش استفاده کردم
ولی یه مشکل اساسی دارم
در FormsAuthentication بعد از ایجاد دسترسی برای کاربر و صدور بلیط مجوز های دسترسی را از دیتابیس خوانده و در Session قرار میدم. مشکل جایی ایجاد میشه که بعد از گذشت Timeout مجوز ها در سرور از بین خواهد رفت و در مراجعه بعدی وقتی کدی که شما در بالا استفاده کردید رو استفاده میکنیم مقدار Session خالی خواهد بود و به اشتباه به صفحه مورد نظر هدایت میشویم. این روش یه مشکل دیگه هم داره. با زیاد کردم Timeout بار اضافه که بر سرور وارد میشود باعث ایجاد ضعف امنیتی و مشکل در حملات Dos خواهد شد.
به نظر من رو Role-Based Authorization کار کنید

baghdaj
دوشنبه 02 شهریور 1394, 00:15 صبح
با سلام
من جدیدا با asp برنامه رو نوشتم که برای کنترل مجوز کاربران وقتی کاربر رمز رو صحیح وارد میکنه یک session میسازه و مقدار اونرو true میکنه و در تمام صفحات دیگه من چک کردم اگه اون session مقدارش true بود صفحه رو بازکن (برای امنیت بیشتر) حالا مشکل من اینه که جدیدا یک کاربری اومده و این برنامه رو هک میکنه خیلی هم ادعاش میشه نامرد

و روش هک رو کامل نمیگه ولی با کلی گریه و التماس فقط گفت که من دستی روی دستگاه خودم اون session رو ست میکنم و با این روش میتونم بدون رمز به تمام صفحات دسترسی داشته باشم سوال من اینه که آیا صحبت او درسته و میشه همچین کاری رو کرد و چگونه و آیا راه حلی برای این مشکل وجود داره یا خیر
ممنون


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