من از دوستان این سوال رادارم که امنیت در سی شارپ چیست اصلا چه کار می کنه آیا کسی هست یک نمونه مثال بزنه من می خوامم ببینم وقتی می گن یک برنامه از امنیت بالا برخوردار است مثل چه کدی نوشته
فرض کنیم یک بانک اطلاعاتی داریم و یک Table که اطلاعات UserName و Password کاربران نرم افزار
داخلش نگهداری می شه و این بانک اطلاعاتی با حداکثر امنیت ممکن و تحت تدابیر شدید امنیتی حفاظت شده
که مو لای درزش نمیره.
حالا من برنامه نویسی هستم که قراره برای Login کردن و ورود کاربر به داخل نرم افزار یک فرم طراحی کنم
که ابتدای اجرای برنامه نشون داده بشه و اگر کاربر مشخصات UserName و Password رو درست وارد کرد اجازه
عبور بده و اگر اشتباه وارد کرد اجازه عبور نده.
اگر تازه کار و با تدابیر امنیتی آشنا نباشم احتمالا این کد ساده رو می نویسم و ذوق هم می کنم که کار می کنه :
کد:
string filter = "UserName='" + textBox1.Text + "'"
+ " AND Password='" + textBox2.Text + "'";
DataRow[] row = table.Select(filter);
if (row.Length == 0)
{
MessageBox.Show("Error: Invalid username or password", "Login");
}
else
{
Form1 f1 = new Form1();
f1.Show();
}
اگر کاربر در textBox1 به عنوان UserName متن ali و در textBox2 به عنوان Password متن 123456
رو بنویسه، filter برابر این رشته خواهد شد :
کد:
UserName='ali' AND Password='123456'
اما این کد یک ایراد امنیتی خیلی بزرگ داره، به کاربر اطمینان کامل کرده و هر چی که کاربر درون textBox1
و textBox2 نوشته عینا به عنوان فرمان Select تحویل سیستم مدیریت بانک اطلاعاتی داده. حالا اگر یک هکر
بجای متن Password در textBox2 متن زیر رو بنویسه، همه معادلات امنیتی بهم می خوره :
چون اونوقت filter این رشته خواهد شد :
کد:
UserName='ali' AND Password='' OR '1' ='1'
یعنی اگر کاربر UserName و Password صحیح رو وارد کرده و یا 1 برابر 1 است (که همیشه هست) به کاربر مجور
ورود به نرم افزار رو صادر کن. این شرط همیشه برقرار است و هکر بدون نیاز به دانستن نام کاربری و رمز عبور
بدون مشکل از محافظ امنیتی می گذره، تازه این فقط یک مثال ساده است.
یک کد ایمن تمامی اطلاعات ورودی های کاربر رو بررسی می کنه تا اطلاعات در قالب معتبری باشند، مثلا
فقط حروف و ارقام و یکسری کاراکتر خاص رو به عنوان نام کاربری و رمز عبور می پذیره :
کد:
private bool IsValidInput(string text)
{
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890_-.";
for (int i = 0; i < text.Length; i++)
{
if (chars.Contains(text.Substring(i, 1).ToUpper()) == false)
return false;
}
return true;
}
کد:
if ((IsValidInput(textBox1.Text)) && (IsValidInput(textBox2.Text)))
{
string filter = "UserName='" + textBox1.Text + "'"
+ " AND Password='" + textBox2.Text + "'";
DataRow[] rows = table.Select(filter);
if (rows.Length > 0)
{
Form1 f1 = new Form1();
f1.Show();
return;
}
}
MessageBox.Show("Error: Invalid username or password", "Login");
سوال بعدی من این است که من می خواستم ببینم برنامه ای که برای بانک سپه و ملی ووووو.. نوشته شده برنامه ی موبایل را نمی گم برنامه ای که کارکنانش با آن کار می کنن با چی نوشته شده (الکی نگید ) من آنروز برنامه بانک را مشاهده کردم دارای تکست و لیست باکس و دکمه بود ولی تا حدودی هم بعضی کنترلاش مثل داس بود
چند مساله متفاوت باعث شده که نرم افزار های اداری از رده خارج و قدیمی باشند.
اولین دلیل هزینه طراحی نرم افزار های جدید زیاده، کمبود بودجه هم که همیشه هست.
ثانیا سخت افزار و نرم افزار سیستم های موجود خیلی بروز و مدرن نیست.
ثالثا حفاظت کردن یک نرم افزار امنیتی تحت DOS که با ++C و اسمبلی نوشته شده ساده تر از
جاوا یا زبان های تحت NET. ئه.
رابعا سواد بعضی از همکاران برنامه نویسی که سالها با سازمان های دولتی و ادارات همکاری کرده اند،
همچنان در حد VB for DOS و Fox Pro باقی مونده و همچنان با همان روالی که 15 سال پیش برنامه می نوشتند
کار می کنند، البته انصافا همون ها به صد تا مهندس نرم افزاری که الان دانشگاه هامون تحویل جامعه می دهند
می ارزند.
اگه من بخوام برای بانک ملت برنامه نویسی کنم چه کار باید بکنم و از چه بانک اطلاعاتی استفاده کنم و چقدر باید امنیت درونش باید باشد کسی می تونه در این مود حرفی بگه ! من من سوالی داشتم من کسی را می شناسم که برنامه ای برای بانکهای تهران نوشته و بانکها به او 200000000 میلیون تومان پول دادن و من شاهدم .حالا من این سوال را دارم اگه کسی بخواد برنامه بانک را بنویسه آیا باید هکر یا در زمینه امنیت حرفه ای باشد که این سالها باید وقت گذاشت که حرفه ای شد ؟
بانک اطلاعاتی خودش روی سروری نگهداری میشه که از دسترسی افراد متفرقه خارجه، امنیت سرور هم
مستقل از برنامه ای است که شما می نویسید. شما باید صرفا جلوی دسترسی کاربران متفرقه و یا دسترسی
خارج حیطه مسئولیت کاربر رو بگیرید. طبیعتا هم تا زمانی که از تدابیر امنیتی مربوط به مباحث بانک اطلاعاتی
مطلع نباشید، نمی توانید برنامه ایمنی بسازید. الزاما قرار نیست هکر یا متخصص امنیت باشید، حتی بهتر است
بجای اینکه خودتان شخصا امنیت نرم افزار رو بررسی کنید با یک یا چند متخصص قراردادی ببندید که برنامه شما رو
بررسی کنند تا از نظر امنیتی مشکلی نداشته باشه.
حرف آخرم من سی شارپ دات نت کارم نه تا اون حد می خوام ببینم با همین سی شارپ می تونم برنامه بانک بنویسم و چه امنیت و بانک اطلاعاتی باید برای آن به کار گیرم ؟؟؟؟؟؟؟ببخشید زیاد شد
یکسری موارد امنیتی ربطی به برنامه نویس نداره، مثلا کاربر باید از رمز عبور و نام کاربری اش حفاظت کنه، جلوی
غریبه ها لاگین نکنه، محیط سیستم امن باشه، دوربین مخفی و نرم افزار جاسوسی و غیره رویش نصب نباشه.
شبکه ای که بانک اطلاعاتی رویش سوار شده امن باشه، رمز عبور به حد کافی طولانی و ایمن باشه و ...
تعیین کردن بانک اطلاعاتی و سرورش و ... هم ربطی به برنامه نویس نداره، این موارد مربوط به دپارتمان کامپیوتر
و مدیر فنی شبکه و سرور ئه. شما صرفا باید به بانک اطلاعاتی متصل شوید، برای کد نباید فرقی بکنه که
از SQL Server استفاده شده یا Oracle یا Microsoft Access یا ...
شما صرفا باید یکسری موارد امنیتی دسترسی به بانک اطلاعاتی رو رعایت کنید. کرک شدن نرم افزار و غیره
هم چیزی نیست که شما بتوانید برایش تضمینی ارائه کنید، نرم افزار های امنیتی مرسوم که قراره جلوی
کرک شدن نرم افزار شما رو بگیرند نتوانسته اند جلوی کرک شدن خودشون رو بگیرند و با کرک نصب می شوند.