PDA

View Full Version : مبتدی: مقایسه کد امنیتی



masud8002k
دوشنبه 22 اسفند 1390, 12:42 عصر
سلام من کد امنیتی نوشتم که روی لیبلم نشون میده به صورت راندم
و تا اینجا مشکلی نداره
اما مشکل ایجاست تو این لیبل که کد امنیتی من رو نشون میده یک تکست باکس گذاشتم که کاربر حروفی که میبینه رو وارد کنه و روی باتوم کلیک کنه تا اگر درست بود پیام اوکی بده اگر درست نبود errorبده
ولی نمیدونم چرا مقایسه نمیکنه
اینم کدم
protected void Button1_Click(object sender, EventArgs e)
{
string result;
result = Label1.Text.ToString();
if (TextBox1.Text == result)
{
Label2.Text = "OK";
}
else
{
Label2.Text = "Error";
}

}

fakhravari
دوشنبه 22 اسفند 1390, 12:55 عصر
protected void Button1_Click(object sender, EventArgs e)
{
Label1.Text = "Salam";
string result;
result = Label1.Text.ToString();
if (TextBox1.Text.Trim() == result)
{
Label2.Text = "OK";
}
else
{
Label2.Text = "Error";
}
}

MrsiLeNt
دوشنبه 22 اسفند 1390, 13:24 عصر
ببخشد آقای fakhravari این خاصیت Trim رو میشه یه توضیح مختصر در موردش بدین ؟

masud8002k
دوشنبه 22 اسفند 1390, 13:29 عصر
من اینو اجرا کردم جواب نداد
این چیه؟؟؟
Label1.Text = "Salam";

در ضمن من از عکس استفاده نمیکنم راندم در لیبل نشون میدم

fakhravari
دوشنبه 22 اسفند 1390, 13:38 عصر
trim
فاصله های سمت چپ راست برمیداره.
خوب فرقی نداره توی لیبل چی باشه.
فقط چک کنید مقدار null ارسال نشه

masud8002k
دوشنبه 22 اسفند 1390, 13:49 عصر
مشکل من رفع نشد مقایسه نمیکنه؟
حروف راندوم که تولید میشه در لیبیل 1
اینم کد من بعد از راهنمایی شما
Label1.Text = "Salam"; string result;
result = Label1.Text.ToString();
if (TextBox1.Text.Trim() == result)
{
Label2.Text = "OK";
}
else
{
Label2.Text = "Error";
}


وقتی دگمه مفایسه رو میزنم که ببینم درست چک میکنه یا نه
اولا لیبیل یک به سلام تغییر پیدا میکنه
دوما مینویسه
error
در حالی که غلط وارد نمیکنم؟

fakhravari
دوشنبه 22 اسفند 1390, 13:59 عصر
Break Points بزارید روی if و result ببنید مقادیرش چنده

masud8002k
دوشنبه 22 اسفند 1390, 14:10 عصر
من Break Points رو فعال کردم ایراد رو از جای دیگه گرفت این کد سورسمه
protected void Page_Load(object sender, EventArgs e)
{
string abc = "qwertyuioplkjhgfdsazxcvbnm1234567890";
Random rnd = new Random();
object abc1 = rnd.Next(1,36);
object abc2 = rnd.Next(1, 36);
object abc3 = rnd.Next(1, 36);
object abc4 = rnd.Next(1, 36);
object abc5 = rnd.Next(1, 36);
object abc6 = rnd.Next(1, 36);
string strabc1 = abc.Substring(Convert.ToInt32(abc1),1);
string strabc2 = abc.Substring(Convert.ToInt32(abc2),1);
string strabc3 = abc.Substring(Convert.ToInt32(abc3), 1);
string strabc4 = abc.Substring(Convert.ToInt32(abc4), 1);
string strabc5 = abc.Substring(Convert.ToInt32(abc5), 1);
string strabc6 = abc.Substring(Convert.ToInt32(abc6), 1);
string result = strabc1 + strabc2 + strabc3 + strabc4 + strabc5 + strabc6;
Label1.Text = result;

}
protected void Button1_Click(object sender, EventArgs e)
{


string result;
result = Label1.Text.ToString();
if (TextBox1.Text.Trim() == result)
{
Label2.Text = "OK";
}
else
{
Label2.Text = "Error";
}



ایراد رو از قسمت زیر میگیره
string result = strabc1 + strabc2 + strabc3 + strabc4 + strabc5 + strabc6;

aminghaderi
دوشنبه 22 اسفند 1390, 15:09 عصر
این که کد امنیتی نیست؟!
من الان با یه برنامه 20 خطی می تونم رباتی بنویسم که خودش بیاد و کد امنیتی شما رو دور بزنه و وارد سایت بشه؟!
در کدام مرجع امنیتی خوانده اید که کد "انسان شناس" می تواند در داخل یک برچسب باشد؟؟ (حالا من توجهی به نوع تولیدش ندارم که از ابتدا اشتباه هست!)
------------------
راهنمایی برای تولید کد امنیتی :
1- کد امنیتی باید متشکل از کاراکتر ها و یا کلمات تصادفی که با استفاده توابع Random تولید می شوند باشد و در مباحث امنتی بالا باید به صورت Runtime ساخته شوند و جایی ذخیره نشوند(منظور داخل دیتابیس ذخیره نشوند و هر چند وقت یک بار همون رو به کاربر نمایش بدیم.)
2- باید تصویر باشد !!! اسم دیگر کد انسان شناس "کد نصویر" هست ، به این علت که باید تصویر باشد تا نشود رباتی نوشت که وارد سایت شود و کاراکتر ها را پردازش کند.(البته چند سال دیگه با رشد علم پردازش تصویر باید تصاویر پیچیده تری خلق کرد ، هر چند که تئوری های بیومتریک راه حل های خوبی رو ارئه داده.)
توضیح : در دات نت کلاس هایی گرافیکی برای نوشتن بروی تصویر وجود دارد که برای مارک گذاری بروی تصاویر هم استفاده می شود ، شما می تونید از این کلاس ها استفاده کنید (اطلاعات بیشتر جستجو در گوگل)
3- حالا باید یک بلاک شرط بگذارید و در داخل آن چک کنید که TextBox1.Text برابر با متغیر x ما هست یا خیر و اگر برابر بود وارد بلاک شده و اگر نبود پیام می دهید که از این جا به بعدش رو فکر کنم خودتون می دونید.
البته من پیشنهاد دارم از کامپوننت های موجود استفاده کنید ، چون اونها بحث پردازش تصویر رو هم در نظر گرفتند .(البته اگر جنبه امنیت اطلاعات خیلی براتون مهمه خودتون وقت بگذارید بهتره. )

امیدوارم پاسخم مفید بوده باشه.
موفق باشید.

masud8002k
دوشنبه 22 اسفند 1390, 15:36 عصر
دوست عزیر راهنماییتون بسیار مفید بود و من ار الان شروع میکنم تا متد رو عوض کنم من خیلی دوست دارم در برنامه نویسی حرفه ای باشم و علاقه ای به استفاده از کامپوننت های آماده ندارم
مرسی بابت اطلاعات خوبتون

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

sanay_esh
دوشنبه 22 اسفند 1390, 16:07 عصر
با سلام و عرض ادب تمامی پیشنهادات اساتید و بجاست ولی بنده یه پیشنهاد دیگه هم دارم اونم اینکه

شما میتوانید یک سری سوالات ریاضی با عملگرهای مختلف رو با روشی که aminghaderi (http://barnamenevis.org/member.php?91679-aminghaderi)توضیح داده است را به تصویر تبدیل و جواب آن را بررسی کنید که الان بهترین روش برای جلوگیری از روبوتهای گوناگون هست

تصویری هم که میسازید باید تفاوت رنگی داشته باشد که زیاد نشه با پردازش تصویری چک کرد البته شما به سایتهای بانکی مراجعه نمائید میتوانید کد امنیتی آنها را با یک روبات تبدیل به حرف یا عدد نمائید بستگی داره که وقتی سوال شما مفهومی است

و روباتهایی که نوشته شده اند زیاد با پاسخهای مفهومی کاری ندارند بهترین حالت برای سوال امنیتی میتواند یاشد

fakhravari
دوشنبه 22 اسفند 1390, 16:42 عصر
یه نمونه
http://mohamad-hoosein.persiangig.com/asp/Login%20And%20Image.rar

aminghaderi
دوشنبه 22 اسفند 1390, 23:14 عصر
دوست عزیر راهنماییتون بسیار مفید بود و من ار الان شروع میکنم تا متد رو عوض کنم من خیلی دوست دارم در برنامه نویسی حرفه ای باشم و علاقه ای به استفاده از کامپوننت های آماده ندارم
مرسی بابت اطلاعات خوبتون

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

خواهش می کنم.
اگر منظورتون این کد شماست :

protected void Page_Load(object sender, EventArgs e)
{
string abc = "qwertyuioplkjhgfdsazxcvbnm1234567890";
Random rnd = new Random();
object abc1 = rnd.Next(1,36);
object abc2 = rnd.Next(1, 36);
object abc3 = rnd.Next(1, 36);
object abc4 = rnd.Next(1, 36);
object abc5 = rnd.Next(1, 36);
object abc6 = rnd.Next(1, 36);
string strabc1 = abc.Substring(Convert.ToInt32(abc1),1);
string strabc2 = abc.Substring(Convert.ToInt32(abc2),1);
string strabc3 = abc.Substring(Convert.ToInt32(abc3), 1);
string strabc4 = abc.Substring(Convert.ToInt32(abc4), 1);
string strabc5 = abc.Substring(Convert.ToInt32(abc5), 1);
string strabc6 = abc.Substring(Convert.ToInt32(abc6), 1);
string result = strabc1 + strabc2 + strabc3 + strabc4 + strabc5 + strabc6;
Label1.Text = result;

}
خوب این چند تا مشکل داره :
1- الگریتم کاری شما بهینه نیست.
2- خود کد ها هم بهینه نیست.
3- استفاده از منابع هم به نظر من زیاده .
این سه مورد که عیب گرفتم موارد کوچکی نیست برای فراگیری انها نیاز به چند سال کار است.
اما الگریتم بهینه این مورد چیست ،شما باید دنبالش باشید و در این باره تحقیق کنید.
یه نمونه اون استفاده از شرط است ، شما بین 1-9 یک عدد تصادفی می گیرید حالا اگر 1 بود s و اگر 2 بود می شود D و بقیه هم به همین ترتیب.
ولی نمی شه گفت این الگریتم 100 صد بهینه است و برای این کار الگریتم های دیگری هم احتمالا طراحی شده که باید تحقیق کرد.
اما درباره هدف شما باید بگم هدفی بس سخت و سنگینی رو انتخاب کردید که باید بدونید چه هزینه ای باید برای رسیدن به ان پرداخت کنید.
شما هنوز اول راه هستید (جسارت نباشه ) شما باید سنتون بین 17 تا 19 باشه که بتونید در این راه سختی ها رو تحمل کنید ، اگر سن شما بیشتر هست من به عنوان برادر کوچکتر یا شاید بزرگتر بهتون برادانه می گم که راه سختی رو انتخاب کردید در این راه بی پولی های فراوانی باید تحمل کنید و باید خیلی بردبار باشید که مشکلی براتون پیش نیاد یا خانواده شما بدون کوچکترین منتی شما رو پشتیبانی مالی کنند.
جدا این بحث شما باید امیدتون رو از دست ندید و تلاش و پشتکار شبانه روزی داشته باشید و بجای تفریح به تحلیل بپردازید تا در چند سال اینده موفق بشید.
راهی که یه برنامه نویس دات نت انتخاب می کند راهی سریع و روان است یعنی بعد از حدود یک سال راحت می شود درامد کسب کرد ولی برای راه شما که ذات مهندسی نرم افزار و تحلیلگری است سالها زمان لازم هست و اینجاست که سواد + تجربه و شاخص های علمی (فعالیت های علمی ، ارئه مقالات علمی و..) مطرح می شه.
به نظر من راه بسیار خوبی انتخاب کردید نه بخاطر اینکه راهی هست که خودم رفتم ، بخاطر اینکه دیدشما نسبت به بقیه در برنامه نویسی متفاوت خواهد بود و برای شما "بن بست" معنا پیدا نخواهد کرد.
اگر بتونید فاکتور مالی و زمانی و جسمی (چون قراره زیاد کار کنید و بی خوابی مکرر تحمل کنید) را داشته باشید ، اینشاالله به نتیجه می رسید .

موفق باشید.