PDA

View Full Version : امنیت صفحات از طریق sessionها



jannati
دوشنبه 16 شهریور 1383, 15:26 عصر
دیگه واقعا شرمنده.این دیگه سوال آخر امروزه!
من میخوام مثل روش aspدر صفحه loginیک sessionتعریف کنم که اگر کاربر لاگین کرد این session مثلا trueبشه.بعد در page_loadتمام صفحاتم ابتدا چک کنم که این sessionمقدارش چیه و در صورت درست نبودن به صفحه لاگین برم.حالا دوتا سوال دارم:
1-این روش تا چه حد مطمپنه؟اگر خوب نیست شما چه راه حلی را پیشنهاد میکنید؟
2-در asp.netچطور این sessionتعریف میشه؟(syntax)آیا نیاز به اقداماتی در فایل global.asaxداره یا نه؟اگر ممکنه هرکسی چیزی میدونه بگه.حتما به درد میخوره.
بازم از اینکه اینهمه حوصله کردید ممنونم :wink:

Farhad.B.S
دوشنبه 16 شهریور 1383, 15:58 عصر
1.بستگی به طریقه استفاده شما داره !
در هر صورت ASP.Net دارای مدلی برای تایین هویت به نام Forms Authentication هستش ، بهتره مطالعاتی در مورد اون هم داشته باشید. مطمئنا امکانات بیتشری داره ...
قمست اول دو مقاله در این باب :
http://www.ondotnet.com/pub/a/dotnet/2003/01/06/formsauthp1.html
http://www.15seconds.com/issue/020220.htm

2.مقدار دادن به یک سشن :

object obj = 123;
Session["YourSessionName"] = obj;
از اونجایی که سشن ها از نوع Object هستند (پدر اکثر کلاس های دیگه) بنابراین میتونید تقریبا تمام انواع داده ای رو در اونها نگهداری کنید.

faramarz_s
دوشنبه 16 شهریور 1383, 16:22 عصر
آیا پیشنهاد می شود که یک ابجکت را در سشن ذخیره نمود؟ :!:

Farhad.B.S
دوشنبه 16 شهریور 1383, 16:43 عصر
آیا پیشنهاد می شود که یک ابجکت را در سشن ذخیره نمود؟
هر چیزی که بخواهید در سشن ذخیره کنید ابتدا به object بر میگرده و سپس در سشن ذخیره میشه.یعنی زمانی که شما یک استرینگ رو داخل یک سشن قرار میدید ، ابتدا یک implicit casting انجام میشه و سپس ذخیره سازی صورت میگیره.

در واقع جنس آیتم های کلاس HttpSessionState از نوع object هستش. فکر میکنم چند وقت دیگه مشکلات explicit casting در اینگونه موارد با روی کار آمدن generic ها حل بشه. :wink:

jannati
سه شنبه 17 شهریور 1383, 08:33 صبح
خیلی ممنون از پاسختون
در جزوه آقای نصیری هم یک فصل کامل به این موضوع اختصاص داده شده.اما من اطلاعات کاربران را که لاگین میکنند از داخل databaseمیخونم.اما در توضیحاتی که در این مورد دیدم usernameوpasswordمستقیما در web.configنوشته میشه.آیا میتونم با روش form authenticationاز دیتابیس بخونم؟اگه میشه چطوری؟

jannati
سه شنبه 17 شهریور 1383, 11:08 صبح
من session رو همونطوری که شما گفتید در page_loadیکی از صفحاتم تعریف کردم.اما باخطای زیر مواجه شدم:


the session dosnot exist in the class ro namespace

:?

Farhad.B.S
سه شنبه 17 شهریور 1383, 11:15 صبح
خیر ، شما میتونید خودتون معتبر بودن یا نبودن یوزر رو (به طریقه خودتون) چک کنید و سپس از SetAuthCookie استفاده کنید :


if (ValidUser)
{
System.Web.Security.FormsAuthentication.SetAuthCoo kie(txtUsername.Text,false); //or true
}

Farhad.B.S
سه شنبه 17 شهریور 1383, 11:24 صبح
من session رو همونطوری که شما گفتید در page_loadیکی از صفحاتم تعریف کردم.اما باخطای زیر مواجه شدم:


the session dosnot exist in the class ro namespace

:?

#C به حروف بزرگ و کوچک حساسه ، سشن را به صورت Session بنویسید.

jannati
چهارشنبه 18 شهریور 1383, 14:05 عصر
خیر ، شما میتونید خودتون معتبر بودن یا نبودن یوزر رو (به طریقه خودتون) چک کنید و سپس از SetAuthCookie استفاده کنید :

همین کافیه؟



while (mm.Read ())
{
if (mm["sath"].ToString ()=="a")
{
FormsAuthentication.SetAuthCookie(txtLogin.Text, true);
FormsAuthentication.RedirectFromLoginPage(txtLogin .Text, true);
Server.Transfer ("asli.aspx",true);

}

من با همچین کدی بعد از اینکه سطح دسترسی کاربر درست بود(یعنی a بود)این چک را انجام میدم.همین کافیه؟
یعنی اگه آدرس صفحات دیگر را در addressبار IEکپی کنیم صفحه لاگین رو میاره؟(با همین کد؟)

jannati
شنبه 21 شهریور 1383, 08:26 صبح
معذرت میخوام .میشه یکی راهنمایی کنه؟برای اینکه صفحات دیگه قابل دسترسی نباشه چه کارهای دیگری باید انجام بدم؟ :?

Farhad.B.S
شنبه 21 شهریور 1383, 10:44 صبح
شما دو مقاله ذکر شده رو خوندید ؟ در همون جا به طور کامل شرح داده شده ...
به هر حال ، شما در web.config مشخص میکنید که کدامیک از صفحات نیاز به شناسایی کاربر دارند و کدامیک ندارند . سپس در صورتی که کاربر توسط SetAuthCookie مورد تایید قرار گرفته شده باشد به صفحات حفاظت شده دسترسی دارد و در غیر این صورت به LoginUrl که در وب کانفیگ مشخص کردید هدایت میشود.

jannati
شنبه 21 شهریور 1383, 11:00 صبح
بله دوست عزیز .من مقالات مربوط به MSDNراهم با آدرس زیر به طور کامل مطالعه کردم:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/SecNetHT03.asp

ولی هنوز مشکلات زیر را دارم:
1-چطوری صفحاتی را که میخوام محافظت بشن در web.configتعریف کنم؟
2-وقتی که کلمه کاربری و عبور با آنچه که در tableدارم مطابقت داشت کدهای بالا را اجرا میکنم.بعد به صفحه بعدی میره.اما وقتی آدرس نمایش همین صفحه بعدی را در یک IEبه صورت جدا از برنامه اجرا میکنم این صفحه اجرا میشه و به صفحه loginنمیره.
:? :oops: :roll:

Farhad.B.S
شنبه 21 شهریور 1383, 11:40 صبح
محدود کردن یک دایرکتوری :


<location path="protected_directory">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>

برای محدود کردن یک صفحه هم path رو به آدرس صفحه مورد نظر ست میکنید.

این قسمت از تنظیمات در قسمت <configuration> فایل وب کانفیگ ذخیره میشه.

jannati
یک شنبه 22 شهریور 1383, 09:31 صبح
ممنون از توضیحاتتون
فقط یک توضیح هم مال تازه کارهایی مثل خودم بدم که این تکه کد مربوط به محدودکردن دایرکتوری را بعد از تگ

</system.web>(مربوط به webconfigخودتون)وارد کنید.(یه روز طول کشید تا اینو متوجه شدم (:D) )
بازم از راهنمایی های آقای Frhad.B.Sممنونم :flower:

Peyman_Ranjbar
چهارشنبه 08 مهر 1383, 03:28 صبح
ولی من از این کد که استفاده میکنم فقط صفحات asp.net رو محدود میکنه
حتی دیتابیس اکسس هم که رو سایت هست راحت داونلود میشه
چکار کنم؟؟

Vahid_Nasiri
چهارشنبه 08 مهر 1383, 17:57 عصر
دیتابیس اکسس رو همیشه می شود دانلود کرد! (خصوصا اگر از جستجوی حرفه ای گوگل استفاده کنید... )
ولی خوشبختانه موتور اکسس به پسوند فایلش حساس نیست. بنابراین پسوند فایل را یکی از پسوندهای حفاظت شده توسط سرور قرار دهید. :wink:

nematia
پنج شنبه 09 مهر 1383, 02:02 صبح
دیتابیس اکسس رو همیشه می شود دانلود کرد! (خصوصا اگر از جستجوی حرفه ای گوگل استفاده کنید... )
میشه بیشتر توضیح بدین!

Peyman_Ranjbar
پنج شنبه 09 مهر 1383, 02:58 صبح
دیتابیس اکسس رو همیشه می شود دانلود کرد!

بنازم به این امنیت!!!
مگه از بانک اطلاعاتی چه توقع دیگه ای باید داشت!!
منو بگو که داشتم خودم رو میکشتم تا یجوری راهش بندازم


پسوند فایل را یکی از پسوندهای حفاظت شده توسط سرور قرار دهید.
_________________
میشه چند تا از این پسوندهای محافظت شده رو مثال بزنید

ممنون از شما استاد نصیری

Vahid_Nasiri
پنج شنبه 09 مهر 1383, 09:01 صبح
میشه بیشتر توضیح بدین!
نه! برخلاف قوانین سایت است. (به مقالاتی مانند گوگل دوست XXXها! در سایتهای دیگر مراجعه کنید.)


میشه چند تا از این پسوندهای محافظت شده رو مثال بزنید
برای مثال داخل دایرکتوری bin فایل mdb را با پسوند dll قرار دهید. فایل dll محافظت شده است.
(بدیهی است که در برنامه باید این مسیر و این فایل با این پسوند را بعنوان دیتاسورس معرفی کرد)

Vahid_Nasiri
پنج شنبه 09 مهر 1383, 09:11 صبح
لیست کامل پسوند فایلهای حفاظت شده :


.aspx is used for ASP.NET pages.
.rem and .soap are used for Remoting.
.asmx is used for Web Services.
.asax, .ascx, .config, .cs, .csproj, .vb, .vbproj, .webinfo, .asp, .licx, .resx, and .resources are protected resources

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetsec/html/THCMCh19.asp

Peyman_Ranjbar
جمعه 10 مهر 1383, 00:05 صبح
دیتابیس اکسس رو همیشه می شود دانلود کرد!

خوب به هر حال باید یه راهی برای محدود کردن دسترسی به دایرکتوری ها باشه
مثلا اگه بخواخم عکس کاربر ها رو تو فولدر با یه پسوند دیگه ذخیره کنم که خیلی ضایع هست :mrgreen:

turk_programmer
سه شنبه 14 مهر 1383, 06:59 صبح
سلام.
چرا از اراکل یا Sql Server استفاده نمیکنین که امنیتشون خیلی بیشتره و در ذخیره کردن تصویر هم مشکلی ندارن ؟ اکسس برای استفاده حرفه ای ایجاد نشده ! همچنین قابلیت سرعت و جواب دهی به درخواست ها از سوی اکسس خیلی پایین تر از دو بانک اطلاعاتی ذکر شده هست.