# زبان های اسکریپتی > Classic ASP >  ساخت session دستی

## hmm

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

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

----------


## MSYNK

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

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

----------


## Farhad.B.S

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

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

----------


## hmm

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

----------


## MSYNK

با سلام




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



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

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

----------


## Farhad.B.S

1.خیر ، سشن ها در سمت سرور (در حافظه ماشین سرور) ذخیره میشند و این کوکی ها هستند که در سمت کلاینت ذخیره میشند.
2.چیزی به نام Asp.Net Authentication  (به عنوان یک روش تایین هویت منفرد ) وجود نداره ، سیستم تعیین هویت ای اس پی دات نت به سه قسمت Windows Authentication ، Forms Authentication و Passport Authentication تقسیم میشه.
چیزی که در اینجا مورد بحثه ، Forms Authentication هستش . این سیستم هم میتونه متکی بر سشن ها و هم متکی بر کوکی ها باشه که انتخاب اول اون سشن هاست .

----------


## MSYNK

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

----------


## Farhad.B.S

سادست ، سیستم پذیرش کوکی را غیر فعال کنید.
حالا تکه کد زیر رو امتحان کنید :

	private void btnSignIn_Click&#40;object sender, System.EventArgs e&#41;
		&#123;
			System.Web.Security.FormsAuthentication.SetAuthCoo  kie&#40;"username",false&#41;;
		&#125;

	private void Page_Load&#40;object sender, System.EventArgs e&#41;
		&#123;
			Response.Write&#40;Request.IsAuthenticated&#41;;
		&#125;

----------


## hmm

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

----------


## komeil64

سلام 
جناب Farhad.B.Sمیشه آدرس یک مثال از  Authentication را بدین
چون من لاگین را با Authentication ننوشتم و از این چیزی که نوشتم زیاد خوشم نیومد
ممنون

----------


## Delphi-Clinic

دوست من برو سوالت رو تو بخش ASP مطرح کن.

----------


## hmm

این سوال رو اینجا مطرح کردم چون میدونم اساتید asp قدیم در این بخش هستند :oops:  :lol:

----------


## Spoofed

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

----------


## hmm

if  &#40;Session&#40;"Uservaled"&#41; = ""&#41; then
responce.redirect&#40;"err.asp"&#41;  
end if

----------


## kimia1

> if  (Session("Uservaled") = "") then 
> responce.redirect("err.asp")  
> end if


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

If Session&#40;"Uservaled"&#41; = False or IsNull&#40;Session&#40;"Uservaled"&#41;&#41; = True then
	'Redirect to unathorised user page
	Response.Redirect"err.asp"
End If

----------


## Spoofed

چه کدی منتهی به مقدار دهی اولیه برای Session می شود؟ آن کد هم مهم است.

----------


## hmm

ولی در شرایط عادی درست کار میکنه 
کد شما هم زیاد تغییری نداره فقط مقدار null رو چک میکنه که اونهم در برنامه اثری نداره
یعنی اون هکره از این کد نمیتونه به نفع خودش استفاده کنه

----------


## faryad_mfa

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

----------


## baghdaj

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



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

----------

