PDA

View Full Version : امنیت + web.config



secureid
جمعه 18 خرداد 1386, 11:11 صبح
سلام .
من یک سری صفحه داخل یه فولدر دارم که می خوام تنها افرادی که username password وارد کردند بتونند وارد شوند . توی root سایت یه فایل ککانفیک دارم که اعتبار سنجی رو فرمی کردم بدین صورت :

<authentication mode="Forms">
<forms loginUrl="Login.aspx" />
</authentication>
واخل فولدر هم یه کانفیگ دارم بدین صورت :

<authorization>
<allow users="secureid"/>
<deny users="*"/>
</authorization>

الان همه چی درست کار می کنه ولی من می خوام وقتی کاربر وارد صفحه login شد و اسم و رمز رو وارد کرد و به صفحه مورد نظر منتقل شد بعضی از اطلاعاتش مثل همین اسم کاربری باهاش منتقل بشه . نمی خوام از session استفاده کنم چون می خوام امنیتش بالا باشه .
یه راهی به من نشون بدید .

Alireza_Salehi
جمعه 18 خرداد 1386, 14:59 عصر
سلام .
من یک سری صفحه داخل یه فولدر دارم که می خوام تنها افرادی که username password وارد کردند بتونند وارد شوند . توی root سایت یه فایل ککانفیک دارم که اعتبار سنجی رو فرمی کردم بدین صورت :

<authentication mode="Forms">
<forms loginUrl="Login.aspx" />
</authentication>
واخل فولدر هم یه کانفیگ دارم بدین صورت :

<authorization>
<allow users="secureid"/>
<deny users="*"/>
</authorization>

الان همه چی درست کار می کنه ولی من می خوام وقتی کاربر وارد صفحه login شد و اسم و رمز رو وارد کرد و به صفحه مورد نظر منتقل شد بعضی از اطلاعاتش مثل همین اسم کاربری باهاش منتقل بشه . نمی خوام از session استفاده کنم چون می خوام امنیتش بالا باشه .
یه راهی به من نشون بدید .
همه روشها نهایتا به Session یا کوکی ختم میشن ، از هر روشی هم استفاده کنید ضعف های امنیتی خاص خودش رو داره که باید با روشهای موجود اونها رو تقویت کنید.

این مقاله رو هم ببینید:
http://www.codeproject.com/aspnet/formsroleauth.asp

secureid
شنبه 19 خرداد 1386, 01:08 صبح
اسن که گفتید درست . ولی استفاده کردن از Session و کوکی برای سایتی که درمدت 5 روز 1000 نفر تنها روی 3 کامپیوتر می خان ثبت نام کنند اصلا" استفاده کردن از کوکی یا session درست نیست . بهترین راههمون اعتبار سنجی فرمی اگه بشه پارامتر ارسال کرد البته .

Alireza_Salehi
شنبه 19 خرداد 1386, 08:19 صبح
Forms Authentication برای ارسال Tiket های امنیتی از کوکی ها استفاده میکنه!

اگر راه جدیدتری و البته امن تری وجود داره اساتید بفرمایند!

titbasoft
شنبه 19 خرداد 1386, 10:34 صبح
از UserData برای دخیره اطلاعات می تونید کمک بگیرید

Sub Page_Load(sender As Object, e As EventArgs)
Welcome.InnerHtml = "Hello, " + _
Server.HtmlEncode(User.Identity.Name)

Dim id As FormsIdentity = CType(User.Identity, FormsIdentity)
Dim ticket As FormsAuthenticationTicket = id.Ticket

cookiePath.Text = ticket.CookiePath
expireDate.Text = ticket.Expiration.ToString()
expired.Text = ticket.Expired.ToString()
isPersistent.Text = ticket.IsPersistent.ToString()
issueDate.Text = ticket.IssueDate.ToString()
name.Text = ticket.Name
userData.Text = ticket.UserData
version.Text = ticket.Version.ToString()
End Sub

Sub Signout_Click(sender As Object, e As EventArgs)
FormsAuthentication.SignOut()
Response.Write("Logged out - cookie deleted.")
End Sub



Forms Authentication برای ارسال Tiket های امنیتی از کوکی ها استفاده میکنه!درسته پس در نتیجه تنها تفاوتش انکریپشن مخصوص ASP .Net است. ضمنا در مورد Session Hijacking (http://www.google.com/search?hl=en&rls=GGGL%2CGGGL%3A2006-35%2CGGGL%3Aen&q=session+hijacking&btnG=Search) اگر اطلاع ندارید، یه نگاهی بندازید بد نیست


ولی استفاده کردن از Session و کوکی برای سایتی که درمدت 5 روز 1000 نفر تنها روی 3 کامپیوتر می خان ثبت نام کنند اصلا" استفاده کردن از کوکی یا session درست نیستهزار نفر که هیچی من گارانتی می کنم یک ملیون نفر هم مشکل ساز نشه.

Alireza_Salehi
شنبه 19 خرداد 1386, 11:18 صبح
از UserData برای دخیره اطلاعات می تونید کمک بگیرید

Sub Page_Load(sender As Object, e As EventArgs)
Welcome.InnerHtml = "Hello, " + _
Server.HtmlEncode(User.Identity.Name)

Dim id As FormsIdentity = CType(User.Identity, FormsIdentity)
Dim ticket As FormsAuthenticationTicket = id.Ticket

cookiePath.Text = ticket.CookiePath
expireDate.Text = ticket.Expiration.ToString()
expired.Text = ticket.Expired.ToString()
isPersistent.Text = ticket.IsPersistent.ToString()
issueDate.Text = ticket.IssueDate.ToString()
name.Text = ticket.Name
userData.Text = ticket.UserData
version.Text = ticket.Version.ToString()
End Sub

Sub Signout_Click(sender As Object, e As EventArgs)
FormsAuthentication.SignOut()
Response.Write("Logged out - cookie deleted.")
End Sub


درسته پس در نتیجه تنها تفاوتش انکریپشن مخصوص ASP .Net است. ضمنا در مورد Session Hijacking (http://www.google.com/search?hl=en&rls=GGGL%2CGGGL%3A2006-35%2CGGGL%3Aen&q=session+hijacking&btnG=Search) اگر اطلاع ندارید، یه نگاهی بندازید بد نیست

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

لینک این userdata رو که اون بالا گذاشته بودم، در مورد SessionHijaking اطلاع دارم ولی کلا هر روشی که برای انتقال اطلاعات استفاده کنید میشه هکش کرد ، باید از روشهای استاندارد و تعریف شده برای محافظت از کانال ارتباطی و داده ها استفاده کرد.

titbasoft
شنبه 19 خرداد 1386, 11:32 صبح
لینک این userdata رو که اون بالا گذاشته بودمببخشید مقاله رو باز نکرده بودم. فکر کردم اون هم در مورد کوکی و شسن هست.

در مورد SessionHijaking اطلاع دارممن پست شما رو quote کردم اما مخاطب من در این جمله جناب secureid (http://www.barnamenevis.org/forum/member.php?u=12859) بودند.

secureid
شنبه 19 خرداد 1386, 12:00 عصر
از UserData برای دخیره اطلاعات می تونید کمک بگیرید

Sub Page_Load(sender As Object, e As EventArgs)
Welcome.InnerHtml = "Hello, " + _
Server.HtmlEncode(User.Identity.Name)

Dim id As FormsIdentity = CType(User.Identity, FormsIdentity)
Dim ticket As FormsAuthenticationTicket = id.Ticket

cookiePath.Text = ticket.CookiePath
expireDate.Text = ticket.Expiration.ToString()
expired.Text = ticket.Expired.ToString()
isPersistent.Text = ticket.IsPersistent.ToString()
issueDate.Text = ticket.IssueDate.ToString()
name.Text = ticket.Name
userData.Text = ticket.UserData
version.Text = ticket.Version.ToString()
End Sub

Sub Signout_Click(sender As Object, e As EventArgs)
FormsAuthentication.SignOut()
Response.Write("Logged out - cookie deleted.")
End Sub


درسته پس در نتیجه تنها تفاوتش انکریپشن مخصوص ASP .Net است. ضمنا در مورد Session Hijacking (http://www.google.com/search?hl=en&rls=GGGL%2CGGGL%3A2006-35%2CGGGL%3Aen&q=session+hijacking&btnG=Search) اگر اطلاع ندارید، یه نگاهی بندازید بد نیست

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

با تشکر از شما .
راستش من از این کد خیلی سر در نیاوردم . و این سوالا برام پیش اومد:
1- من چند تا فیلد از بانک می خونم و بعد از زدن دکمه login اون اطلاعات رو به یک صفحه دیگه منتقل می کنم .(در صورت درست بودن) این پارامتر ها رو کجای کد می فرستم و کجای کد می گیرم
2- این کدی رو که گذاشتید تو کدوم صفحه بذارم ؟ login یا مقصد؟
3- توی صفحات کانفیک چیزی رو نباید عوض کنم ؟

ممنون میشم راهنمایی کنید .

Mojtaba_ss
شنبه 19 خرداد 1386, 14:13 عصر
وقتی کاربر نام کاربری و پسورد خودش رو زد و شما اونو تو پایگاه چک کردی:

System.Web.Security.FormAuthentication.RedirectFro mLoginPage(UserName,false);

Username رو از تکست باکس می گیری!

حالا تو صفحاتت برای نشون دادن نام کاربری :

System.Web.httpContext.current.User.Identity.Name;

titbasoft
شنبه 19 خرداد 1386, 16:11 عصر
ببینید، فرقی نمی کنه که کجا هستید، شما با این روش:

Dim id As FormsIdentity = CType(User.Identity, FormsIdentity)
Dim ticket As FormsAuthenticationTicket = id.Ticket می تونید یک رفرنس از تیکت کاربر جاری بدست بیارید. حالا برای هر تیکت یک پراپرتی به نام UserData در نظر گرفته شده که یک مقدار string قبول می کنه. شما در هر جایی (البته برای کاربری که Authenticate شده) می تونید این مقدار رو ست کنید یا از روش بخونید. پس اگر مثلا می خواهید که نام کاربر رو دخیره کنید خیلی ساده:

ticket.userdata=myNameبرای خوندنش هم:

txtName=ticket.userdata

Alireza_Salehi
شنبه 19 خرداد 1386, 22:26 عصر
با تشکر از شما .
راستش من از این کد خیلی سر در نیاوردم . و این سوالا برام پیش اومد:
1- من چند تا فیلد از بانک می خونم و بعد از زدن دکمه login اون اطلاعات رو به یک صفحه دیگه منتقل می کنم .(در صورت درست بودن) این پارامتر ها رو کجای کد می فرستم و کجای کد می گیرم
2- این کدی رو که گذاشتید تو کدوم صفحه بذارم ؟ login یا مقصد؟
3- توی صفحات کانفیک چیزی رو نباید عوض کنم ؟

ممنون میشم راهنمایی کنید .
لینکی که در پست 2 گذاشتم به دقت بخونید به تمام سوالاتتون پاسخ داده.

eworkpro
جمعه 30 شهریور 1386, 04:47 صبح
سلام .
اول باید تو کانفیگ اینو نوشت :
<authentication mode="Forms">
<forms name=".ASPXUSERDEMO" loginUrl="Index.aspx" protection="All" timeout="30" />
</authentication>
<authorization>
<deny users="?" />
</authorization>

بعدش تو صفحه ی لاگین دوتا تکست باکس می زاری یکی برای نام کاربری و یکی برا پسورد
و بعد این کد رو می نویسی :

Dim con1 As New SqlConnection(conn)
Dim sqlstr1 As String
sqlstr1 = "select * from users where username='" + UserID.Text + "' and password='" + Password.Text + "'"
Dim cmd1 As New SqlCommand(sqlstr1, con1)
Dim dr1 As SqlDataReader
con1.Open()
dr1 = cmd1.ExecuteReader
If dr1.Read = True Then
FormsAuthentication.RedirectFromLoginPage(dr1("id"), False)
Else
UserID.Text = ""
Password.Text = ""
End If

دقت کن که یک table با نام users داری که مشخصات کاربر داخلشه !
همین . حالا اگر نام و پسورد درست باشه لاگین می شه .
در صفحه کاربری هم می تونی برا بدست اوردن مشخصات کاربر کد زیر رو بنویسی :

Dim ds As DataSet

ds = SqlHelper.ExecuteDataset(conn, "dbo.sp_getbyid", User.Identity.Name)
Label1.Text = ds.Tables(0).Rows(0)("username")
Label2.Text = ds.Tables(0).Rows(0)("company")
Label3.Text = ds.Tables(0).Rows(0)("email")

که من اینجا از dll هم استفاده کرد . dll اسمش هست microsoft.applecation.block
البته فرقی هم نداره مهم اینه که get by id کنی از روی User.Identity.Name
خداحافظ