PDA

View Full Version : اظافه کردن application setting بصورت ایمن



milad_d993
شنبه 11 اردیبهشت 1400, 07:47 صبح
سلام دوستان
یوزر پسورد برنامه رو اگه توی فایل user.config بخوایم ذخیره کنیم که بصورت clear نباشه چه چیزی باید اظافه کنیم؟؟


private void button1_Click(object sender, EventArgs e)
{
Properties.Settings.Default.username = textBox1.Text;
Properties.Settings.Default.password = textBox2.Text;
Properties.Settings.Default.Save();
}

الان با کد بالا بصورت clear ذخیره میشه

the king
شنبه 11 اردیبهشت 1400, 14:27 عصر
سلام دوستان
یوزر پسورد برنامه رو اگه توی فایل user.config بخوایم ذخیره کنیم که بصورت clear نباشه چه چیزی باید اظافه کنیم؟؟


private void button1_Click(object sender, EventArgs e)
{
Properties.Settings.Default.username = textBox1.Text;
Properties.Settings.Default.password = textBox2.Text;
Properties.Settings.Default.Save();
}

الان با کد بالا بصورت clear ذخیره میشه
حدالامکان خود Username و Password یا حداقل Password رو چه کد شده و چه نشده اصلا ثبت نکنید، بجای ثبت مقدار شون Hash شون رو ثبت کنید.
شما همیشه می توانید برای ذخیره سازی یک داده یک تابع رمزی دو طرفه (تابع کد کننده و تابع کد گشا) رو بکار ببرید، اما هر چقدر هم که تابع قوی ای باشه همچنان احتمال کشف داده ای که قابل برگشته هست.

Hash تابع یکطرفه داره، یعنی نام کاربری و رمز عبور میتونه به سادگی به Hash تبدیل بشه اما از Hash نمیشه به سادگی به رمز عبور یا نام کاربری رسید و همین مساله امنیت رو بالا می بره.


private void button1_Click(object sender, EventArgs e)
{
Properties.Settings .Default.username = GetHash (textBox1.Text);
Properties.Settings .Default.password = GetHash (textBox2.Text);
Properties.Settings .Default.Save();
}

private string GetHash (string value)
{
using (var sha512 = System.Security. Cryptography.SHA512. Create())
{
return Convert.ToBase64String (sha512.ComputeHash (Encoding.UTF8. GetBytes (value)));
}
}


ثبت Hash به این معنا است که با داشتن Hash نمی توانید بدونید که رمز عبور کاربر دقیقا چیه، نمی توانید به کاربر یا شخص دیگری بگید که رمز عبور اینه، اما می توانید چک کنید که آیا رمز عبوری که وارد می کنه درسته یا نه.

private void button2_Click(object sender, EventArgs e)
{
if (GetHash (textBox1.Text).Equals (Properties.Settings .Default.username)
&& GetHash (textBox2.Text).Equals (Properties.Settings .Default.password))
{
MessageBox.Show ("Welcome.");
}
else
{
MessageBox.Show ("Username or password is incorrect.");
}
}


رجوع شود به :
مشكل با متد GetHashCode (https://barnamenevis.org/showthread.php?376143-%D9%85%D8%B4%D9%83%D9%84-%D8%A8%D8%A7-%D9%85%D8%AA%D8%AF-GetHashCode)
چرا باید پسورد را هش شده در دیتا بیس ذخیره کنیم؟ (https://barnamenevis.org/showthread.php?353365-%DA%86%D8%B1%D8%A7-%D8%A8%D8%A7%DB%8C%D8%AF-%D9%BE%D8%B3%D9%88%D8%B1%D8%AF-%D8%B1%D8%A7-%D9%87%D8%B4-%D8%B4%D8%AF%D9%87-%D8%AF%D8%B1-%D8%AF%DB%8C%D8%AA%D8%A7-%D8%A8%DB%8C%D8%B3-%D8%B0%D8%AE%DB%8C%D8%B1%D9%87-%DA%A9%D9%86%DB%8C%D9%85%D8%9F)