PDA

View Full Version : مبتدی: نشان دادن کد امنیتی بعد از 3 بار ورود نا موفق؟



minajasmi
جمعه 25 آذر 1390, 16:18 عصر
سلان دوستان چطور میتونم چک کنم که کاربر 3 بار یوزر را اشتباه زده تا بعد از اون کد امنیتی را نشون بدم ممنون

mo.esmp
جمعه 25 آذر 1390, 16:43 عصر
protected void Login1_LoginError(object sender, EventArgs e)
{
if (Session["time"] == null)
{
int time = 1;
Session["time"] = time;
Response.Write("Wrong times: 1");
}
else
{
int time = (int)Session["time"];
Session["time"] = time + 1;
Response.Write("Wrong times: " + time.ToString());
if (time >= 3)
{
// Show the captcha.
}
}
}

minajasmi
جمعه 25 آذر 1390, 17:18 عصر
ممنون. این کدا باید تو دکمه لاگین بزارم؟؟
آیا سشن را باید خودم ایجاد کنم یا فقط این کدا بزارم؟
کد چک کردن user,pass را قبل از این کد بزارم یا بعدش؟؟

mo.esmp
جمعه 25 آذر 1390, 17:37 عصر
اينجا از کنترل Login استفاده شده، شما اگه کنترل Login استفاده نميکنيد ميتونيد کد رو بد از دستور Membership.ValidateUser بذاريد
protected void LoginButton_Click(object sender, EventArgs e)
{
if (Membership.ValidateUser(UsernameTextBox.Text, PasswordTextBox.Text))
FormsAuthentication.RedirectFromLoginPage(Username TextBox.Text, RememberCheckBox.Checked);
else
{
if (Session["time"] == null)
{
int time = 1;
Session["time"] = time;
Response.Write("Wrong times: 1");
}
else
{
int time = (int)Session["time"];
Session["time"] = time + 1;
Response.Write("Wrong times: " + time.ToString());
if (time >= 3)
{
// Show the captcha.
}
}
}
}

minajasmi
جمعه 25 آذر 1390, 18:21 عصر
من یوزر و پس را تو جدول ذخیره کردم این ک ددکمه لاگینمه.


string strcon1 = ConfigurationManager.ConnectionStrings["con"].ConnectionString;
string u2 = "";
string s2 = "";
// string strcon = "Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\kharidforoosh.mdf;Integrated Security=True;User Instance=True";
SqlConnection connection1 = new SqlConnection(strcon1);
SqlCommand cmd1 = new SqlCommand("select username,password from login", connection1);
try
{
connection1.Open();
SqlDataReader dr = cmd1.ExecuteReader();
while ((dr.Read()))
{
u2 = dr["username"].ToString().Trim();
s2 = dr["password"].ToString().Trim();
}

if ((TextBox1.Text == u2) && (TextBox2.Text == s2))
{
Session.Add("user", TextBox1.Text.Trim());
Session.Add("pass", TextBox2.Text.Trim());
Response.Redirect("masteradmin.aspx");
}
else
{
TextBox4.Text = ".نام کاربری و پسورد خود را صحیح وارد نمایید";
}
}
catch (SqlException ex)
{
Response.Write(ex.Message.ToString());
}
finally
{
if ((connection1.State != ConnectionState.Closed))
{
connection1.Close();

}

}

mo.esmp
جمعه 25 آذر 1390, 18:27 عصر
else
{
TextBox4.Text = ".نام کاربری و پسورد خود را صحیح وارد نمایید";
if (Session["time"] == null)
{
int time = 1;
Session["time"] = time;
Response.Write("Wrong times: 1");
}
else
{
int time = (int) Session["time"];
Session["time"] = time + 1;
Response.Write("Wrong times: " + time.ToString());
if (time >= 3)
{
// Show the captcha.
}
}
}

minajasmi
جمعه 25 آذر 1390, 22:00 عصر
ممنون دوست عزیز حالا بعد ازنمایش کد امنیتی شرط چک کردن صحیحشو کجا باید بزارم.که بعد 3 بار اون کد چک بشه؟؟

mo.esmp
جمعه 25 آذر 1390, 23:22 عصر
شرط چک کردن صحیح چی رو میگید ؟

minajasmi
جمعه 25 آذر 1390, 23:32 عصر
کد امنیتی که بار سوم نشون میده

rahmatr
جمعه 25 آذر 1390, 23:47 عصر
اصولا نمایش تصویر امنیتی برای جلوگیری از نرم افزارهایی است که در نقش یک کاربر فرم را پر و ارسال می کنند، نه برای جلوگیری از ورود اطلاعات توسط کاربری که 3 بار پسوردشو اشتباه وارد کرده.
بنابراین استفاده از Session فایده ای ندارد. زیرا نرم افزار هکر هر بار با یک Session به سایت وصل می شود.

بنابراین باید از یک متغییر سراسری مثل Application و یا متغییرهای استاتیک و یا فیلدی در بانک اطلاعاتی برای اینکار استفاده شود و کلید متغییر هم باید یا IP باشد و یا UserName.
استفاده از IP خیلی مطمئن نیست زیرا هکر می تواند هر بار با یک IP متفاوت درخواست خود را ارسال کند.
بهترین کار UserName است که معلوم می کند که برای یک کاربر خاص n بار پسورد اشتباه وارد شده است و در نتیجه هکر نمی تواند برای هر UserName بیشتراز n بار، اطلاعات ارسال کند.

int WrongPasswordTimes(string userName)
{
return (int)(Application["WrongPasswordTimes" + userName] ?? 0);
}

minajasmi
شنبه 26 آذر 1390, 00:27 صبح
اصولا نمایش تصویر امنیتی برای جلوگیری از نرم افزارهایی است که در نقش یک کاربر فرم را پر و ارسال می کنند، نه برای جلوگیری از ورود اطلاعات توسط کاربری که 3 بار پسوردشو اشتباه وارد کرده.
بنابراین استفاده از Session فایده ای ندارد. زیرا نرم افزار هکر هر بار با یک Session به سایت وصل می شود.

بنابراین باید از یک متغییر سراسری مثل Application و یا متغییرهای استاتیک و یا فیلدی در بانک اطلاعاتی برای اینکار استفاده شود و کلید متغییر هم باید یا IP باشد و یا UserName.
استفاده از IP خیلی مطمئن نیست زیرا هکر می تواند هر بار با یک IP متفاوت درخواست خود را ارسال کند.
بهترین کار UserName است که معلوم می کند که برای یک کاربر خاص n بار پسورد اشتباه وارد شده است و در نتیجه هکر نمی تواند برای هر UserName بیشتراز n بار، اطلاعات ارسال کند.

int WrongPasswordTimes(string userName)
{
return (int)(Application["WrongPasswordTimes" + userName] ?? 0);
}
میشه کامل بگید چطور از این کد استفاده کنم ممنون میشم با توجه به کد لاگینم نخوه قرار دادن این کدتو کد لاگین را بگید

fakhravari
شنبه 26 آذر 1390, 01:39 صبح
با سلام در قسمتی که یوزر و پس اشتباه میگیره باید از کد بالا که دوستمون rahmatr داد استفاده کرد.
بعد باید با شرط کنترل کرد که ایا این کاربر 3 بار درخواست کرده.
اگر ممبرشیپ کار کرده باشید پیشفرض 10 بار که بعد از اون 10 بار فرد بلوک میشه که باید مدیر اون باز کنه

mo.esmp
شنبه 26 آذر 1390, 02:13 صبح
اصولا نمایش تصویر امنیتی برای جلوگیری از نرم افزارهایی است که در نقش یک کاربر فرم را پر و ارسال می کنند، نه برای جلوگیری از ورود اطلاعات توسط کاربری که 3 بار پسوردشو اشتباه وارد کرده.
بنابراین استفاده از Session فایده ای ندارد. زیرا نرم افزار هکر هر بار با یک Session به سایت وصل می شود.
بنابراین باید از یک متغییر سراسری مثل Application و یا متغییرهای استاتیک و یا فیلدی در بانک اطلاعاتی برای اینکار استفاده شود و کلید متغییر هم باید یا IP باشد و یا UserName.
استفاده از IP خیلی مطمئن نیست زیرا هکر می تواند هر بار با یک IP متفاوت درخواست خود را ارسال کند.
بهترین کار UserName است که معلوم می کند که برای یک کاربر خاص n بار پسورد اشتباه وارد شده است و در نتیجه هکر نمی تواند برای هر UserName بیشتراز n بار، اطلاعات ارسال کند.
[

خوبه اگه بحث هکر و امنيت در سطوح بالا پيش بياد username هم کارساز نميشه چون هکر هر دفعه ميتونه چندين username مختلف رو تست کنه پس username هم قابل دور زدن هست. در اين جور مسايل راه حل 100% وجود نداره یا تا حالا من ندیدم. ولی بهترين کار استفاده از ip و username باهم ديگه است. حالا نحوه ذخيره سازيش تو ديتابيس باشه ،تو session باشه، hash بشه، encrypt بشه .. ديگه بستگی به policy و میزان امنیت سایت داره.

اینم یه کنترل Ajax Control Toolkit هست شاید به دردتون خورد.

http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/NoBot/NoBot.aspx
این لینک هم به نکات خوبی در مورد امنیت session, login, password ... اشاره کرده

http://forums.asp.net/t/1568967.aspx/1
مثال برای ثبت لاگين کاربر در کوکی

http://forums.asp.net/t/1446634.aspx/1
مثال برای ثبت لاگين کاربر در متغییر و فایل لاگ

http://forums.asp.net/t/1089627.aspx
اینم یه مثال کامل

http://captcha.biz/doc/aspnet/samples/csharp/asp.net-membership-captcha-sample.html