PDA

View Full Version : لطفا آموزش دهید!ذخیره اطلاعات کاربر بعد از ورود به سایت



مهدی رحیم زاده
دوشنبه 03 خرداد 1389, 13:05 عصر
سلام
من برای نگهداری این اطلاعات مانند طوح دسترسی کاربر از Session استفاده می کردم اما طبق جست و حویی که توی سایت کردم این روش روش امنی نیست و استفاده از راه های دیکه رو دوستان پیشنهاد کردن. بنده در مورد نحوه استفاده از این راه ها اطلاعاتی ندارم . اگر میشه یکی از دوستان که وقتشو داره لطف کنه و برام توضیح بده .
با تشکر

L u k e
دوشنبه 03 خرداد 1389, 13:25 عصر
می تونی از Cookie استفاده کنی
فکر کنم مشکل امنیتی نداشته باشه

مهدی رحیم زاده
دوشنبه 03 خرداد 1389, 15:50 عصر
می تونی از Cookie استفاده کنی
فکر کنم مشکل امنیتی نداشته باشه
دوست من
این روش هم مشکلات خواص خودش رو داره و میشه با استفاده از XSS به اطلاعات اون هم دسترسی پیدا کرد .
عیب Session اینجاست که Session ID رو توی یک کوکی نگهداری می کنه و به همین دلیل هکر می تونه به اون دسترسی پیدا کنه . یه روشی بود فک کنم Autherizing اگه درست نوشته باشم . کسی نمی تونه استفاده از اون رو آموزش بده؟
با تشکر

imanasp
دوشنبه 03 خرداد 1389, 19:53 عصر
دوست من
این روش هم مشکلات خواص خودش رو داره و میشه با استفاده از XSS به اطلاعات اون هم دسترسی پیدا کرد .
عیب Session اینجاست که Session ID رو توی یک کوکی نگهداری می کنه و به همین دلیل هکر می تونه به اون دسترسی پیدا کنه . یه روشی بود فک کنم Autherizing اگه درست نوشته باشم . کسی نمی تونه استفاده از اون رو آموزش بده؟
با تشکر
بهترین روش استفاده از relationship است که امکانات بالایی در زمینه مدیریت و اطلاعات کاربر به شما ارائه میده

PhoenixNet
دوشنبه 03 خرداد 1389, 20:08 عصر
سلام به دوستان عزیز

اگه از روش امنیتی مایکروسافت استفاده می کنید

با استفاده از Role به راحتی میتونید دسترسی ها را مشخص کنید.یعنی میتونید چک کنید که اگر user در این Role است کار انجام بشه و گرنه پیغام مناسب بده.
اختصاص سطح دسترسی به تک تک کاربرا کار اشتباهیه چون هم گیج کننده است و هم امکان اشتباه زیاد است.

اگه روش خودتون رو برای امنیت دارید

بهترین مکان ذخیره اطلاعات بانک است و شما فقط باید نام کاربری رو داشته باشید.اگه سایتتون پر ترافیکه میتونید یک Object از سطح دسترسی کاربر به هنگام ورود بسازید و کش کنید.
اطلاعات کاربرو در بانک نگه دارید و کوکی استفاده نکنید.

مهدی رحیم زاده
دوشنبه 03 خرداد 1389, 22:07 عصر
دوستان روش ها رو میگن اما در مورد نحوه استفاده از اون توضیحات نمیدن
میشه یه توضیحی هم در این باره بدین؟
با تشکر

hamedsabzian
دوشنبه 03 خرداد 1389, 22:28 عصر
دوستان روش ها رو میگن اما در مورد نحوه استفاده از اون توضیحات نمیدن
میشه یه توضیحی هم در این باره بدین؟
با تشکر

http://barnamenevis.org/forum/showthread.php?t=223018

PhoenixNet
دوشنبه 03 خرداد 1389, 22:34 عصر
سلام به دوستان

بحث امنیت در وب خیلی مفصله با یه پست نمیشه کار به جایی رساند.یه جا درست کنین من میام از پایه چیزایی که بلدمو توضیح میدم.

Peyman.Gh
سه شنبه 04 خرداد 1389, 01:00 صبح
دوستان روش ها رو میگن اما در مورد نحوه استفاده از اون توضیحات نمیدن
میشه یه توضیحی هم در این باره بدین؟
با تشکر

این آموزش را ببینید : http://barnamenevis.org/forum/showpost.php?p=879310&postcount=4

milade
سه شنبه 04 خرداد 1389, 02:05 صبح
من برای نگهداری این اطلاعات مانند طوح دسترسی کاربر از Session استفاده می کردم اما طبق جست و حویی که توی سایت کردم این روش روش امنی نیست و استفاده از راه های دیکه رو دوستان پیشنهاد کردن.
اشتباه به عرض رساندند !!! ( هر چند میشه هکش کرد اما نه اینکه راهی نباشه ... )

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

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


این آموزش را ببینید : http://barnamenevis.org/forum/showpo...10&postcount=4
بر میگردیم به سشن و ...


ببینید دوستان ،
هک سشن خیلی وقته مطرح هستش .
یه هکر ، میتونه یه ویروس بسازه ، Tcp Listen کنه ، و ... و کوکی رو به دست بیاره .
حالا با استفاده از اون کوکی ، با همون نام کاربری وارد سایت بشه .
فرقی نداره از چه روشی استفاده کنید ، بالاخره میرسید به کوکی به نام ASP.NET_SessionId .
این نام حتماً برا خیلی ها اشناست .
بله!
هر درخواستی که برا سشن / کنترلهای Asp.net به کاربر برسه این کوکی هم همراهش ست میشه .

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

[دیر وقته ، دیگه توان تایپ ندارم . اگه مشکلی بود فردا توضیح میدم ]

موفق باشید

مهدی رحیم زاده
سه شنبه 04 خرداد 1389, 08:03 صبح
میلاد خان سلام

فرقی نداره از چه روشی استفاده کنید ، بالاخره میرسید به کوکی به نام ASP.NET_SessionId .
یعنی حتی اگه از Autherizing (اگه درست اسمشو نوشته باشم) بازم به این کوکی میرسیم؟
یک از دوستان هم میگفت که اطلاعات رو از یه راهی شبیه همینی که من گفتم توی Web.Config ذخیره میکنه .
خیلی از دوستان هم راهش رو تایید کرده بودن.
از اون اطلاعی ندارین؟
در مورد روش خودت هم میشه بیشتر توضحی بدی؟
با تشکر

hamedsabzian
سه شنبه 04 خرداد 1389, 10:06 صبح
گرفتن اطلاعات خصوصی کاربر ( مثل IP ) و کد کردن و نشاندن در سشن .
وقتی از Session استفاده می کنید. چیزی به جز SessionID توی کوکی قرار نمی گیره. و بقیه داده هایی که ریختید توی Session بر طبق اون SessionID توی سرور ذخیره میشه.
پس چه نیازی به رمزنگاری اطلاعاتی هستش که می خوایم تو Session بریزیم؟
وقتی خودتون دستی چیزی رو توی کوکی ها میریزید، اگه امنیتش مهمه رمزش کنید.

hamedsabzian
سه شنبه 04 خرداد 1389, 10:12 صبح
فقط باید از دزدیده شدن SessionID جلوگیری کنید.

مهدی رحیم زاده
سه شنبه 04 خرداد 1389, 15:08 عصر
فقط باید از دزدیده شدن SessionID جلوگیری کنید.
خوب راه حل این چیه؟

armiin
سه شنبه 04 خرداد 1389, 17:27 عصر
این آموزش را ببینید : http://barnamenevis.org/forum/showpost.php?p=879310&postcount=4
اين آموزشتون خيلي خوب بود فقط چندتا سئوال داشتم :
* مهم ترين سئوال اينه چطور ميشه اين نوع ثبت نام انتقال داد به داخل سايت ، خب با اين آموزش فقط براي برنامه نويس مقدور هستش كه Role ها و User‌ها رو مشخص كنه ولي تو اكثر سايت ها يه قسمت ثبت نامي هست ، يه قسمتي هست كه مدير سايت Role هاي هر دسته از كاربرهارو معين ميكنه و ...
* سئوال بعدي كه برام پيش اومد اينه حتما بايد براي Password تو اين حالت از Space استفاده كرد وگرنه خطا ميگيره ! نميشه كاريش كرد ؟
* با اين كار خود VS داخل پروژه DataBase طراحي ميكنه ، نميشه اين خودمون با SqlServer‌ درستش كنيم ؟

ببخشيد سئوالام زياد شد :چشمک:

milade
سه شنبه 04 خرداد 1389, 18:58 عصر
میلاد خان سلام
سلام علیکم حاجی جون .

یعنی حتی اگه از Autherizing (اگه درست اسمشو نوشته باشم) بازم به این کوکی میرسیم؟
ببینید authorization یه روش برا تعیین هویت هستش .
که بالاخره باید ASP.NET برا حفظ هویت یه سشن ایجاد کنه و به طبع اون ، یه کوکی برا کاربر سفارش داده میشه .

یک از دوستان هم میگفت که اطلاعات رو از یه راهی شبیه همینی که من گفتم توی Web.Config ذخیره میکنه .
نه این طور نیستش ، یه سری ریزه کاری ها که مربوط به Session هم نیست توی وب کانفیگ میره .

خیلی از دوستان هم راهش رو تایید کرده بودن.
از اون اطلاعی ندارین؟
شاید خیلی از دوستان ! توجهی به Session Hijacking نداشته بودند !
البته نا گفته نماند که کنترل ذاتی .Net خیلی قوی هستش ، اما ..

در مورد روش خودت هم میشه بیشتر توضحی بدی؟
یک بار دیگه به طور کوتاه عرض میکنم :

هر Session که بخواد ایجاد بشه یه Session ID میگیره ، که با استفاده از این میتونیم به سشن دسترسی داشته باشیم .
این کار دو روش هستش :
URL Saving
Cookie Saving

در هر دو روش فوق یه ID به طول 24 کاراکتر ایجاد میشه .
در روش اول توی URL قرار میگیره و در روش دوم توی کوکی .
کوکی یه مقدار امن تر هستش چرا که حداقلش از دید خیلی ها محفوظه .
اما باز هم دزدیدن کوکی سخت نیست به طوری که توی سال 2009 حدود 14 ملیون سرور و کلاینت الوده به روش دزیدن سشن شدند .
خب چرا ؟!
چون وقتی ما یه درخواست میدیم سرور انگار داره این طوری عمل میکنه ( که در روش In SQLSERVER واقعاً هم همین طوریه ! ) :

Select * From Tbl_Name Where ID=@id
که @id همونی هست که توی کوکی قرار داره .
پس ما اگه بتونیم کوکی مدیر کل بانک ملی رو بدزیدیم میتونیم به راحتی به عنوان مدیر کل وارد سایت بشیم !!!!!!!!!!

جهت جلوگیری میتونیم یه سری پارامتر مثل ایپی و ... که معمولاً تفاوت داره رو هش کنیم و بزاریم داخل کوکی مربوط به Session .
حالا در هر بار درخواست میایم دوباره اطلاعات رو که هش کرده بودیم رو میگیریم و یه مقایسه با اطلاعات کاربر جاری انجام میدیم ،
اگه درست بود که پیام میدیم "ورود موفقیت امیز"
اگه نه هم پیام میدیم "ای شیطون ، میخوای فوضولی کنی ؟!"

تمام شد رفت !
به همین سادگی به همین خوشمزگی .

وقتی از Session استفاده می کنید. چیزی به جز SessionID توی کوکی قرار نمی گیره. و بقیه داده هایی که ریختید توی Session بر طبق اون SessionID توی سرور ذخیره میشه.
پس چه نیازی به رمزنگاری اطلاعاتی هستش که می خوایم تو Session بریزیم؟
وقتی خودتون دستی چیزی رو توی کوکی ها میریزید، اگه امنیتش مهمه رمزش کنید.
ببخشید !
این جمله درسته :

گرفتن اطلاعات خصوصی کاربر ( مثل IP ) و کد کردن و نشاندن در کوکی.
کلمه سشن رو اشتباه نوشتم .

فقط باید از دزدیده شدن SessionID جلوگیری کنید.
نمیشه .
خودتون میتونید 100 تا دلیل بیارید .

اين آموزشتون خيلي خوب بود فقط چندتا سئوال داشتم :
یا یه تاپیک بزنید یا ببرید توی تاپیک مربوطه .
توی این تاپیک قراره در مورد یه چیز دیگه صحبت بشه !


موفق باشید .

armiin
سه شنبه 04 خرداد 1389, 20:12 عصر
یا یه تاپیک بزنید یا ببرید توی تاپیک مربوطه .
توی این تاپیک قراره در مورد یه چیز دیگه صحبت بشه !
زیاد بی ربط نبود سئوالم :متفکر: عنوان تاپیکو ملاحظه بفرمایید !
به نظر خودتون راهی که شما پیشنهاد کردید امنتر هست یا آموزش تصویری این دوستمون (http://barnamenevis.biz/forum/showpost.php?p=879310&postcount=4 (http://barnamenevis.org/forum/showpost.php?p=879310&postcount=4)) ؟
شما تو صفحه ی قبل گفتید این آموزش هم برمیگرده به همون مباحث سشن و ... ، میشه بیشتر توضیح بدید ، من تو این آموزش اثری از سشن ندیدم ؟

milade
سه شنبه 04 خرداد 1389, 20:18 عصر
زیاد بی ربط نبود سئوالم عنوان تاپیکو ملاحظه بفرمایید !

عنوان رو بیخیال ، اینو بچسب !:

http://barnamenevis.org/forum/showpost.php?p=990448&postcount=1
ضمن اینکه سوالاتتون مربوط بود به کنترلهای Asp.net نه امنیت سشن و ...

به نظر خودتون راهی که شما پیشنهاد کردید امنتر هست یا آموزش تصویری این دوستمون (http://barnamenevis.biz/forum/showpost.php?p=879310&postcount=4) ؟
اره ، تا حالا 2 مرتبه گفتمش ... .

شما تو صفحه ی قبل گفتید این آموزش هم برمیگرده به همون مباحث سشن و ... ، میشه بیشتر توضیح بدید ، من تو این آموزش اثری از سشن ندیدم ؟
شما وقتی ار کنترل لاگین استفاده میکنید ، یا به صورت کد نویسی لاگین Asp.net رو پیاده میکنید ،
پشت صفحه داره 1000 تا خط اجرا میشه که خیلی از اونها بر میگرده به Session و ...

armiin
سه شنبه 04 خرداد 1389, 21:05 عصر
ممنون از جواب کاملتون !


عنوان رو بیخیال ، اینو بچسب !:
چشم هرچی شما بگید :لبخند:


شما وقتی ار کنترل لاگین استفاده میکنید ، یا به صورت کد نویسی لاگین ASP.NET رو پیاده میکنید ،
پشت صفحه داره 1000 تا خط اجرا میشه که خیلی از اونها بر میگرده به Session و ...
این حالت هم مزیت خودشو داره (Role ,... ) :متفکر:
* نمیشه این دو روش ادغام کرد ؟

راستش من پست هارو که یک بار دیگه خوندم کمی گیج شدم ، تو روش شما تغییراتی تو Web.config هم داده میشه ؟
من دارم رو یه پروژه کار میکنم تصمیم گرفتم از روش شما استفاده کنم ،میشه لطف کنید یه مثال(پروژه) جهت یادگیری این مطلب برای بنده Up کنید !
پیشاپیش ممنون :لبخندساده:

milade
سه شنبه 04 خرداد 1389, 21:26 عصر
ممنون از جواب کاملتون !
خواهش میکنم .

چشم هرچی شما بگید
نوکرم . شما سروری .

این حالت هم مزیت خودشو داره (Role ,... )
* نمیشه این دو روش ادغام کرد ؟
خب اره ...
یه خط کد نویسی بهتر از 100 تاست !
چرا نشه .
همون طور که گفتم توی پستهای قبل فقط باید ASP.NET_SessionId رو دستکاری کرد .

راستش من پست هارو که یک بار دیگه خوندم کمی گیج شدم ، تو روش شما تغییراتی تو Web.config هم داده میشه ؟
هیچ تغییری انجام نمیشه .
فقط توی Global یه دست کاری هایی کوکی فوق رو میکنید و تمام .
در حد 20 خط کد هستش .

من دارم رو یه پروژه کار میکنم تصمیم گرفتم از روش شما استفاده کنم ،میشه لطف کنید یه مثال(پروژه) جهت یادگیری این مطلب برای بنده Up کنید !
والله دارم روی یه پروژه کار میکنم که وقت هیچ کاری نگزاشته برام .
از 8 صبح تا 7 عصر کار میکنم و از 7 تا 3-4 هم مشکلی باشه و یه وب گردی انجام میدم .
امشب رو فکر نکنم ... اما حتماً تا فردا شب یه چیزایی اماده میکنم براتون .

موفق باشید

armiin
سه شنبه 04 خرداد 1389, 22:36 عصر
فقط دکمه تکشر خیلی کمه ، خیلی ممنون !!! :قلب:
واقعا این مشکل من خیلی وقته دارم !


خب اره ...
یه خط کد نویسی بهتر از 100 تاست !
چرا نشه .
همون طور که گفتم توی پستهای قبل فقط باید ASP.NET_SessionId رو دستکاری کرد .
این حرفتونو در جواب ادغام دو روشی که گفتم ،گفتید .الان دیگه کاملا گیج شدم ! :لبخند:
احتمالا با ارسال نمونه ای که گفتید خودم به جواب سئوالام میرسم !
بازم ممنون

milade
سه شنبه 04 خرداد 1389, 23:03 عصر
این حرفتونو در جواب ادغام دو روشی که گفتم ،گفتید .الان دیگه کاملا گیج شدم !
سلام.
یه روش بیشتر نبود ، اونم این بود که هر چی داره از Session استفاده میکنه ممکنه دزدیده و دستکاری و ... بشه که میتونیم با دستکاری کوکی مربوطه تا حدود زیادی حلش کنیم .

براش فرداشب مثال میدم .

milade
چهارشنبه 05 خرداد 1389, 00:55 صبح
( پیاده سازی در Global ) »
درخواست کوکی از کاربر :


protected void Application_BeginRequest(object sender, EventArgs e)

{

if (Request.Cookies["ASP.NET_SessionId"] != null && Request.Cookies["ASP.NET_SessionId"].Value != null)

{

string newSessionID = Request.Cookies["ASP.NET_SessionID"].Value;

if (newSessionID.Length <= 24)

{

//Attack !

throw new HttpException("Fozol ! be babat migam ....");

}



if (GenerateHashKey() != newSessionID.Substring(24))

{

//bazam attack !

throw new HttpException("Dozdi mikoni ha ?!...");

}



//Inam bara Asp.net ya betone Session ID ro begire

Request.Cookies["ASP.NET_SessionId"].Value = Request.Cookies["ASP.NET_SessionId"].Value.Substring(0, 24);

}

}

افزودن چیزای امنیتی به کوکی ! :

protected void Application_EndRequest(object sender, EventArgs e)

{

if (Response.Cookies["ASP.NET_SessionId"] != null)

{

Response.Cookies["ASP.NET_SessionId"].Value = Request.Cookies["ASP.NET_SessionId"].Value + GenerateHashKey();

}

}
اینم هش امنیتی :

string GenerateHashKey()

{

StringBuilder myStr = new StringBuilder();


myStr.Append(Request.LogonUserIdentity.User.Value) ;



SHA1 sha = new SHA1CryptoServiceProvider();

byte[] hashdata = sha.ComputeHash(Encoding.UTF8.GetBytes(myStr.ToStr ing()));

return Convert.ToBase64String(hashdata);

}

تمام !